力扣 44. 通配符匹配 dp
程序员文章站
2022-07-16 09:54:49
...
https://leetcode-cn.com/problems/wildcard-matching/
思路:表示的前个字符和的前个字符能否匹配。那么答案就是,现在考虑怎么转移,因为两个字符串的下标都是从开始的,所以要通过的关系来推出的状态。如果不等于,那么当或时,有;如果等于,这时实际上有两种情况,第一种就是不和匹配,也就是说的前个字符和的前个字符匹配,所以有;当然还有第二种情况,就是和匹配,那么前一个状态就是的前个字符和的前个字符匹配,所以有。
class Solution {
public:
bool isMatch(string a, string b) {
int n=a.size(),m=b.size();
vector<vector<bool>> dp(n+1);
for(int i=0;i<=n;i++)
dp[i].resize(m+1);
dp[0][0]=1;
for(int i=1;i<=n;i++)
dp[i][0]=0;
for(int i=0;i<=n;i++)
{
for(int j=0;j<=m;j++)
{
if(i&&j&&b[j-1]!='*')
{
if(a[i-1]==b[j-1]||b[j-1]=='?')
dp[i][j]=dp[i-1][j-1];
}
else if(j&&b[j-1]=='*')
{
dp[i][j]=dp[i][j]||dp[i][j-1];//不和*匹配
if(i)
dp[i][j]=dp[i][j]||dp[i-1][j];
}
}
}
return dp[n][m];
}
};
上一篇: 背包-力扣-java