10. 正则表达式匹配
class Solution:
def isMatch(self, s: str, p: str) -> bool:
size_s, size_p = len(s), len(p)
match = [[False for _ in range(size_p + 1)] for _ in range(size_s + 1)]
for i in range(size_s + 1):
for j in range(size_p + 1):
if j == 0:
if i == 0:
match[j][j] = True
else:
if p[j-1] != '*':
if i>= 1 and (s[i-1] == p[j-1] or p[j-1] == '.'):
match[i][j] = match[i-1][j-1]
else:
if j>=2:
match[i][j] |= match[i][j-2]
if (j>=2 and i>=1) and (s[i-1] == p[j-2] or p[j-2] == '.'):
match[i][j] |= match[i-1][j]
return match[-1][-1]
class Solution {
public:
bool isMatch(string s, string p) {
int s_sz = s.size(), p_sz = p.size();
vector<vector <bool> > dp(s_sz + 1, vector<bool>(p_sz + 1));
for(int i = 0; i <= s_sz; i++){
for(int j = 0; j <= p_sz; j++){
if(j == 0){
if(i == 0) dp[i][j] = true;
}else{
if(p[j-1] != '*'){
if(i >= 1 && (s[i-1] == p[j-1] || p[j-1] == '.')){
dp[i][j] = dp[i-1][j-1];
}
}else{
if(j >= 2){
dp[i][j] = dp[i][j] | dp[i][j-2];
}
if(j >= 2 && i >=1 && (s[i-1] == p[j-2] || p[j-2] == '.')){
dp[i][j] = dp[i][j] | dp[i-1][j];
}
}
}
}
}
return dp[s_sz][p_sz];
}
};