2 回答

TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊
我在這里假設(shè)如果字母表包含來(lái)自 inputString 的所有字符并且 inputString 的第一個(gè)和最后一個(gè)字符相同那么它是有效的。
但例如,Alphabet = {a,b} 和 inputString="aaaaa"。所以,我假設(shè)這個(gè)輸入也是有效的。(如果這就是您要查找的內(nèi)容,那么您可以使用以下邏輯來(lái)解決它。)我將 HashSet 用于字母表,然后我們可以迭代整個(gè)字符串并檢查字母表是否包含它。下面的代碼用于將字母字符串轉(zhuǎn)換為 HashSet。
String str="ab";
for(char ch:str.toCharArray()){
alphabet.add(ch);
}
現(xiàn)在,要實(shí)現(xiàn)檢查有效輸入的方法,您可以考慮以下代碼。
public boolean isInAlphabet(String inputString) {
if(inputString==null || inputString.length()==0) return false;
if(inputString.charAt(0)!=inputString.charAt(inputString.length()-1)) return false;
for(char ch:inputString.toCharArray()){
if(!alphabet.contains(ch)) return false;
}
return true;
}

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超7個(gè)贊
這只是如何進(jìn)行的模式,它更像是一種通用模式,在這種情況下會(huì)根據(jù)您的目的進(jìn)行調(diào)整。
(僅當(dāng)?shù)谝粋€(gè)字符與最后一個(gè)字符相同時(shí)才接受)
這是您問(wèn)題的 DFA。
基本上有內(nèi)部狀態(tài)(圓圈)和轉(zhuǎn)換(箭頭) 狀態(tài)
:
S1->開(kāi)始狀態(tài)(總是從這里開(kāi)始)
S2,S3->中間(當(dāng)輸入完成并且此狀態(tài)不被接受時(shí))
S4,S5->最終狀態(tài)(輸入完成,然后接受此狀態(tài))`
Transitions[movements array]
(StateA, StateB, char) : 從 SA 到 SB with char
(S1,S3,a) : T1
(S1,S2,b) : T2
(S3,S3,b) : T3
(S3, S4,a) : T4
(S4,S4,a) : T5
(S2,S2,a) : T6
(S4,S3,b) : T7
(S2,S5,b) : T8
(S5,S2,a) : T9
(S5,S5,b) : T10
例如:
1:abb
(S1,a)->S3 by T1
(S3,b)->S3 by T3
(S3,b)->S3 by T3
End on S3 and input is not accepted
2:babb
(S1,b)->S2 by T2
(S2,a)->S2 by T6
(S2,b)->S5 by T9(接受如果輸入是finish:bab,這里不是)
(S5,b) ->S5 by T10
在 S5 上結(jié)束并接受輸入
對(duì)于任何其他不在字母表中的字符遇到,立即返回不接受。
對(duì)于編碼,需要添加狀態(tài)和轉(zhuǎn)換。在每一步逐個(gè)檢查輸入字符時(shí),然后正確更新當(dāng)前狀態(tài)。
希望對(duì)你有用。
添加回答
舉報(bào)