1. 动态规划
class Solution { public: bool isMatch(string s, string p) { int m=s.size(),n=p.size(); vector<vector<bool>> dp(m+1,vector<bool>(n+1,false)); dp[0][0]=true; for(int i=1;i<=n&&p[i-1]=='*';++i) { dp[0][i]=true; } for(int i=1;i<=m;++i) { for(int j=1;j<=n;++j) { if(p[j-1]=='*') { dp[i][j]=dp[i][j-1]||dp[i-1][j]; } else { dp[i][j]=(p[j-1]=='?'||s[i-1]==p[j-1])&&dp[i-1][j-1]; } } } return dp[m][n]; } };
2. star记录*的位置,match记录*匹配的位置,匹配的位置从0个开始
class Solution { public: bool isMatch(string s, string p) { int i=0,j=0,star=-1,match=0; while(i<s.size()) { if(j<p.size()&&(s[i]==p[j]||p[j]=='?')) { ++i; ++j; } else if(p[j]=='*') { star=j; match=i; ++j; } else if(star!=-1) { j=star+1; i=++match; } else return false; } while(j<p.size()&&p[j]=='*') ++j; return j==p.size(); } };