class Solution {
public:
/*
其实一看到这个题目我首先想到的就是动摇规划
那么就拿动态规划来说
那么什么是变量
dp[i][j]代表的是第s[0-i] p[0-j]是否匹配
选择就是
*/
bool isMatch(const char *s, const char *p) {
int size_s = strlen(s);
int size_p = strlen(p);
if(size_s==0 && size_p==0) {
return true;
}
if(size_s==0) {
for(int i=0;i<size_p;i++) {
if(p[i]!='*') {
return false;
}
}
return true;
}
// 为了简化初始化
vector<vector<bool>> dp(size_p+1,vector<bool>(size_s+1,false));
dp[0][0]=true;
for(int i=1;i<=size_p;i++) {
if(p[i-1]!='*') {
break;
}
if(p[i-1]=='*') {
dp[i][0]=true;
}
}
for(int i=1;i<=size_p;i++) {
for(int j=1;j<=size_s;j++) {
if(s[j-1]==p[i-1]) {
dp[i][j]=dp[i][j] || dp[i-1][j-1];
} else if(p[i-1]=='?') {
dp[i][j] = dp[i-1][j-1];
} else if(p[i-1]=='*') {
dp[i][j]=dp[i][j] || dp[i][j-1] || dp[i-1][j-1] || dp[i-1][j];
} else {
dp[i][j] = false;
}
}
}
for(auto a : dp) {
for(auto b : a) {
cout<<b<<" ";
}
cout<<endl;
}
cout<<endl;
return dp[size_p][size_s];
}
};