解题步骤:
参考代码:
class Solution {
public:
bool isMatch(string s, string p) {
int m=s.size();
int n=p.size();
//为了调整映射关系
s=' '+s;
p=' '+p;
//多开一行+多开一列
vector<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];
}
};
你学会了吗???