LC.44. 通配符匹配(DP)
思路:。這裏根據題解再梳理一遍。
顯然可以令爲前個字符和前個字符是否匹配。
首先我們考慮狀態轉移方程。
1.顯然當或者可以直接由轉移過來
即:.
2.如果,顯然可以由轉移過來。
即對應是否爲空串,若是空串直接由轉移。
否則不是空串,因爲可變爲任意字符串所以必能由轉移。
其他情況都不能轉移。
再考慮邊界情況,顯然
,需要考慮前個字符是否都爲,若出現或字母則。
時間複雜度:
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));
dp[0][0]=1;
for(int i=1;i<=n;i++)
if(p[i-1]=='*') dp[0][i]=1;
else break;
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
if(s[i-1]==p[j-1]||p[j-1]=='?') dp[i][j]=dp[i-1][j-1];
else if(p[j-1]=='*') dp[i][j]=dp[i-1][j]|dp[i][j-1];
return dp[m][n];
}
};
自動機知識待補