1./**2.分析:分類討論* 題目描述
* 請實現乙個函式用來匹配包括'.'和'*'的正規表示式。模式中的字元'.'表示任意乙個字元,* 而'*'表示它前面的字元可以出現任意次(包含0次)。 在本題中,匹配是指字串的所有字元匹配整個模式。
* 例如,字串"aaa"與模式"a.a"和"ab*ac*a"匹配,但是與"aa.a"和"ab*a"均不匹配
*/
遞迴終止條件:
//遞迴終止條件一:strindex和patternindex同時等於各自陣列長度
//遞迴終止條件二:模式下標patternindex先到達終點,表示匹配不成功
遞迴情況分類:
//情況1:pattern[patternindex+1]=='*',此時分為兩種情況:
// 1.1 pattern[patternindex]==str[strindex]||pattern[patternindex]=='.' ,分三種情況,見下文
// 1.1.1 abc a*bc ,模式匹配乙個字元
// 1.1.2 aaabc a*bc ,模式匹配多個字元
// 1.1.3 abc a*abc , 模式不匹配字元
// 1.2 pattern[patternindex]!=str[strindex],patternindex + = 2 ,直接跳過當前字元,進行下一輪匹配
//情況2:pattern[patternindex+1]!='*',但是 pattern[patternindex]==str[strindex]||pattern[patternindex]=='.'
//此時,patternindex 和 strindex 都+1
public class solution
private boolean ismmatch(int strindex,charstr,int patternindex ,charpattern)
//遞迴終止條件二:模式下標patternindex先到達終點,表示匹配不成功
if (patternindex==pattern.length)
// 特別注意,永遠要判斷下標,以防越界!!!
//情況1:pattern[patternindex+1]=='*',此時分為兩種情況:
// 1.1 pattern[patternindex]==str[strindex]||pattern[patternindex]=='.' ,分三種情況,見下文
// 1.2 pattern[patternindex]!=str[strindex],patternindex + = 2 ,直接跳過當前字元,進行下一輪匹配
if (patternindex+1// 1.2 aabc b*aabc
else if (patternindex}
//情況2:pattern[patternindex+1]!='*',但是 pattern[patternindex]==str[strindex]||pattern[patternindex]=='.'
//此時,patternindex 和 strindex 都+1
if ((strindex return false;
}// public static void main(string args) ;
// charb=;
// sword52_modal_match s52 =new sword52_modal_match();
// boolean ismatch = s52.match(a,b);
// system.out.println(ismatch);
// }
}
模式匹配演算法
brute force演算法 kmp演算法 kmp演算法的改進 模式匹配 子串的定位操作被叫做串的模式匹配。串相等 串長度相等且各個對應位置的字元都相等。當兩個串不相等時,判斷兩個串大小的方法 給定兩個串 s1 a1a2a3a4 an 和s2 b1b2b3b4 bm 當滿足以下條件之一時,s1n存在...
演算法 模式匹配
你有兩個字串,即pattern和value。pattern字串由字母 a 和 b 組成,用於描述字串中的模式。例如,字串 catcatgocatgo 匹配模式 aabab 其中 cat 是 a go 是 b 該字串也匹配像 a ab 和 b 這樣的模式。但需注意 a 和 b 不能同時表示相同的字串。...
KMP模式匹配演算法以及普通模式匹配演算法
if return value 1 the indexsubstr is not exist else the indexsubstr is exist.int indexsubstr char substr,char str,int pos 0 printf lensubstr d n lensu...