https://leetcode-cn.com/problems/zheng-ze-biao-da-shi-pi-pei-lcof/
思路:表示的前個字符和的前個字符能否匹配。那麼答案就是,現在考慮怎麼轉移,因爲兩個字符串的下標都是從開始的,所以要通過的關係來推出的狀態。如果不等於,那麼當或時,有;如果等於,這時實際上有兩種情況,第一種就是不和匹配,也就是說的前個字符和的前個字符匹配,所以有;當然還有第二種情況,就是和匹配,那麼此時要判斷或,如果匹配上了,那麼前一個狀態就是的前個字符和的前個字符匹配,所以有。
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]=='*')
{
if(j>=2)
dp[i][j]=dp[i][j]||dp[i][j-2];
if(i&&j>=2&&(a[i-1]==b[j-2]||b[j-2]=='.'))
dp[i][j]=dp[i][j]||dp[i-1][j];
}
}
}
return dp[n][m];
}
};