/**10. Regular Expression Matching
* @param s
* @param p
* @returnboolean 正则匹配,字符串s是否满足p,支持'.' and '*'.
*/
public boolean isMatch(String s, String p) {
if (p.length() == 0) {
return s.length() == 0;
}
if (p.length() == 1)
return (s.length() == 1) && (p.charAt(0) == s.charAt(0)|| p.charAt(0) == '.');
if (p.charAt(1) != '*') {
if (s.length() == 0)
return false;
else {
return (s.charAt(0) == p.charAt(0) || p.charAt(0) == '.') && isMatch(s.substring(1), p.substring(1));
}
} else {//下一个是*
while (s.length() > 0 && (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));
}
//递归
改进:
public boolean isMatch1(String s, String p) {
if (p.length() == 0) {
return s.length() == 0;
}
if (p.length() == 1) {
return s.length() == 1
&& (p.charAt(0) == '.' || p.charAt(0) == s.charAt(0)) ;
}
// p.length() i bigger than 1 here
if (p.charAt(1) == '*') {
if (isMatch(s, p.substring(2))) {
return true;
}
return s.length() > 0
&& (p.charAt(0) == '.' || s.charAt(0) == p.charAt(0))
&& isMatch(s.substring(1), p);
} else {
return s.length() > 0
&& (p.charAt(0) == '.' || s.charAt(0) == p.charAt(0))
&& isMatch(s.substring(1), p.substring(1));
}
}
//取消while循环,全部使用递归