兩種思路,第一種遞歸法。
public boolean isMatch(String s, String p) {
//首先判斷pattern為空的情況
if (p.isEmpty()){
return s.isEmpty();
}
//處理pattern長度為1的情況
if (p.length()==1){
//s的長度必須為1
if (s.length() != 1){
return false;
}
else
return p.charAt(0)==s.charAt(0) || p.charAt(0)=='.';
}
//處理pattern長度大于1的情況
//情況1:如果pattern的第二位不為*,那么只需要匹配一位
if (p.charAt(1) != '*'){
//考慮s的長度
if (s.isEmpty()){
return false;
}
else
//需要同時滿足兩個條件:1.第一位相同;2.從第二位開始匹配結(jié)果也為true
return (p.charAt(0)==s.charAt(0) || p.charAt(0)=='.') && isMatch(s.substring(1),p.substring(1));
}
//下面處理第二位為*的情況 這時不能立即判斷s是否為空,因為可能存在*匹配了零次的情況
else{
while (!s.isEmpty() && (p.charAt(0)==s.charAt(0) || p.charAt(0)=='.')){
//處理*為重復零次的情況
if (isMatch(s,p.substring(2))){
return true;
}
//如果*不是匹配零次,則從
s = s.substring(1);
}
}
return isMatch(s,p.substring(2));
}