class Solution {
public:
string xz(string p){
string new_p;
if(!p.length()) return p;
bool flag=false;
for(int i=0;i<p.length();i++){
if(p[i]!='*') {
new_p+=p[i];
flag=false;
}
else{
if(!flag){
flag = true;
new_p+=p[i];
}
}
}
return new_p;
}
bool isMatch(string s, string p) {
p = xz(p);
int x = s.length();
int y = p.length();
bool dp[x+1][y+1];
dp[0][0]=true;
bool flag=true;
for(int j=1;j<=y;j++){
if(flag&&p[j-1]=='*') dp[0][j]=true;
else if(!flag) dp[0][j]=false;
else{
flag=false;
dp[0][j]=false;
}
}
for(int i=1;i<=x;i++){
dp[i][0]=false;
}
for(int i=1;i<=x;i++){
for(int j=1;j<=y;j++){
if(p[j-1]=='*'){
dp[i][j]=false;
for(int start=0;start<=i;start++) dp[i][j]|=dp[start][j-1];
}
else if(p[j-1]=='?'){
if(dp[i-1][j-1]) dp[i][j]=true;
else dp[i][j]=false;
}
else{
if(dp[i-1][j-1]&&p[j-1]==s[i-1]) dp[i][j]=true;
else dp[i][j]=false;
}
}
}
return dp[x][y];
}
};
简单的动态规划即可。可以先对p进行一下修正,将连续的* 改为单个的 *。