- 总共分几种情况:
-
1.两者都结束了
- str.length<=s&&pattern.length<=p 成功!
-
2.pattern结束了,str没结束,那么false
-
3.其他:两者都没结束+str结束pattern没结束
按下一个数是否为*,分两大种情况。
每一种都要考虑str的结束的单独处理。
1.pattern[p+1]为*:
(1)str结束了,直接匹配matchCore(str, s, pattern, p+2);
(2)str没结束
a.现在两者的第一个字符相等。3种情况。复杂的那个。
b.第一个字符不相等。matchCore(str, s, pattern, p+2);
2.pattern[p+1]不为*:
(1)str到头了false。
(2)str没到头:matchCore(str, s+1, pattern, p+1);
public class Solution {
public boolean match(char[] str, char[] pattern)
{ if(str==null||pattern==null) return false;
return matchCore(str,0,pattern,0);
}
public boolean matchCore(char[] str,int s, char[] pattern,int p) {
if(s>=str.length&&p>=pattern.length)
{
return true;
}
//pattern完事了str没匹配完
if(p>=pattern.length&&s<str.length)
return false;
//下一个是*。
if(p<pattern.length-1&&pattern[p+1]=='*') {
if (s == str.length)
return matchCore(str, s, pattern, p + 2);
//s不是最后,情况1此时第一个字符还能匹配上
else if (str[s] == pattern[p] || pattern[p] == '.') {
return matchCore(str, s + 1, pattern, p + 2) || matchCore(str, s, pattern, p + 2) || matchCore(str, s + 1, pattern, p);
} else
return matchCore(str, s, pattern, p + 2);
}
if(s>=str.length) return false;
else{
if(str[s]==pattern[p]||pattern[p]=='.')
return matchCore(str, s+1, pattern, p+1);
}
return false;
}
}