方法一:动态规划
class Solution {
public:
bool isMatch(string s, string p) {
int m=s.size(),n=p.size();
//状态:dp[i][j]表示s以i结尾的字符串与p以j结尾的字符串是否匹配
bool dp[m+1][n+1]={false};
//初始化
dp[0][0]=true;
for(int i=1;i<=n;i++)
dp[0][i]=dp[0][i-1]&&p[i-1]=='*';
//传递方程
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
if(s[i-1]==p[j-1] || p[j-1]=='?')
dp[i][j]=dp[i-1][j-1];
if(p[j-1]=='*')
dp[i][j]=dp[i-1][j] || dp[i][j-1];
}
}
return dp[m][n]; //结果
}
};