正则匹配。最懒的方法,python直接re.match()。。
class Solution:
# @return a boolean
def isMatch(self, s, p):
return re.match('^' + p + '$', s) != None
必须要首尾匹配才行。。
例如:
a='hello'
b='helloworld'
re.match(b,a)=None
re.match(a,b)!=None
c++:
class Solution {
public:
bool isMatch(string s, string p) {
int m = s.length(), n = p.length();
return backtracking(s, m, p, n);
}
bool backtracking(string& s, int i, string& p, int j) {
if (i == 0 && j == 0) return true;
if (i != 0 && j == 0) return false;
if (i == 0 && j != 0) {
//in this case only p == "c*c*c*" this pattern can match null string
if (p[j-1] == '*') {
return backtracking(s, i, p, j-2);
}
return false;
}
//now both i and j are not null
if (s[i-1] == p[j-1] || p[j-1] == '.') {
return backtracking(s, i - 1, p, j - 1);
} else if (p[j-1] == '*') {
//two cases: determines on whether p[j-2] == s[i-1]
//first p[j-2]* matches zero characters of p 就是p[j-2]*取0的情况
if (backtracking(s, i, p, j - 2)) return true;
//second consider whether p[j-2] == s[i-1], if true, then s[i-1] is matched, move to backtracking(i - 1, j)
if (p[j-2] == s[i-1] || p[j-2] == '.') {
return backtracking(s, i - 1, p, j);//返回i-1和j的原因是在p[j-1]为*的情况下,p[j-2]*取0的情况上一个if已经考虑了,继续比较i-1和j为了可能出现的比如‘aaa’和‘a*’这种情况。
}
return false;
}
return false;
}
};