劍指Offer-字串-(7)
阿新 • • 發佈:2018-12-18
知識點/資料結構:字串
題目描述
請實現一個函式用來匹配包括’.‘和’‘的正則表示式。模式中的字元’.‘表示任意一個字元,而’'表示它前面的字元可以出現任意次(包含0次)。 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串"aaa"與模式"a.a"和"abaca"匹配,但是與"aa.a"和"ab*a"均不匹配。
思路
開始看《Java程式設計思想》
正則表示式,詳細看Java基礎部分的正則表示式部分,以後一定要用!不用全記住,但是起碼熟悉,用的時候一查就可以用。
public class Solution { public boolean match(char[] str, char[] pattern) { return matchTwo(str,0,str.length,pattern,0,pattern.length); } private boolean matchTwo(char[] str, int i, int length1, char[] pattern,int j, int length2) { if(i==length1&&j==length2) { return true; } if(i==length1&&j!=length2) { while(j!=length2){ if(pattern[j]!='*'&&(j+1>=length2||pattern[j+1]!='*')){ return false; } j++; } return true; } if(i!=length1&&j==length2) { return false; } if(j+1==length2){ if(str[i]==pattern[j]||pattern[j]=='.') return matchTwo(str, i+1, length1, pattern, j+1, length2); else { return false; } } if((str[i]==pattern[j]||pattern[j]=='.')&&pattern[j+1]!='*') return matchTwo(str, i+1, length1, pattern, j+1, length2); if((str[i]==pattern[j]||pattern[j]=='.')&&pattern[j+1]=='*') return matchTwo(str, i, length1, pattern, j+2, length2)||matchTwo(str, i+1, length1, pattern, j, length2); if(pattern[j+1]=='*') return matchTwo(str, i, length1, pattern, j+2, length2); return false; } }