
解题步骤:





参考代码:
-
- class Solution {
- public:
- bool isMatch(string s, string p) {
- int m=s.size();
- int n=p.size();
- //为了调整映射关系
- s=' '+s;
- p=' '+p;
- //多开一行+多开一列
- vector
bool>> dp(m+1,vector<bool>(n+1,false)); -
- //初始化
- //dp[0][0]表示s和p都是空串,能匹配,所以dp[0][0]=true
- dp[0][0]=true;
- for(size_t j=1;j<=n;j++)
- {
- if(p[j]=='*')
- {
- dp[0][j]=true;
- }
- else
- {
- //后面的全是false,dp表中的值本来就是false,所以可以直接跳出
- break;
- }
- }
-
- for(size_t i=1;i<=m;i++)
- {
- for(size_t j=1;j<=n;j++)
- {
- //p[j]为普通字符
- if(p[j]!='?'&&p[j]!='*')
- {
- if(s[i]==p[j])
- {
- dp[i][j]=dp[i-1][j-1];
- }
- }
- else if(p[j]=='?')
- {
- dp[i][j]=dp[i-1][j-1];
- }
- else if(p[j]=='*')
- {
- dp[i][j]=dp[i][j-1]+dp[i-1][j];
- }
- }
- }
- return dp[m][n];
-
- }
- };
你学会了吗???