cpp
复制代码
class Solution {
public:
bool isMatch(string s, string p) {
s = " " + s;
p = " " + p;
// 加了上面这个就可以避免为"c*xxx"进行特殊初始化
// dp[i][j]表示s[0..i-1]与p[0...j-1]是否可以匹配
vector<vector<bool>> dp(s.size()+1,vector<bool>(p.size()+1,false));
dp[0][0] = true;
for(int i=1;i<=s.size();i++){
for(int j=1;j<=p.size();j++){
if(p[j-1]==s[i-1]){
dp[i][j]=dp[i-1][j-1];
}else if(p[j-1]=='*'){
if(s[i-1]==p[j-2]||p[j-2]=='.'){
dp[i][j] = dp[i][j-2]||dp[i][j-1]||dp[i-1][j]; //不匹配 匹配一个 匹配多个
}else{
dp[i][j] = dp[i][j-2];
}
}else if(p[j-1]=='.'){
dp[i][j] = dp[i-1][j-1];
}else{
dp[i][j]=false;
}
}
}
return dp[s.size()][p.size()];
}
};