Day 1.26
正则表达式匹配
题目
代码
class Solution {
public boolean isMatch(String s, String p) {
if (p.length() == 0) {
return s.length() == 0;
}
if (p.length() > 1 && p.charAt(1) == '*') {
// p的第二个字符是 '*'
//字符"*"把前面的字符消掉,也就是匹配0次或字符"*"匹配1次或多次,此时即比较首字符相同并消掉s第一个字符
return isMatch(s, p.substring(2)) || (s.length() > 0 && comp(s, p)) && isMatch(s.substring(1), p);
} else {
// p的第二个字符不是 '*',判断首字符是否相同,如果相同再从第二位继续比较
return s.length() > 0 && comp(s, p) && (isMatch(s.substring(1), p.substring(1)));
}
}
//比较s的首字符和p的首字符是否匹配
private boolean comp(String s, String p) {
return s.charAt(0) == p.charAt(0) || p.charAt(0) == '.';
}
}