字符串匹配无非两种思路,
dfs可能会爆栈,但可以解决很多匹配,
dp时间复杂度小,但有些问题不能解决。
class Solution {
public:
bool isMatch(string s, string p) {
int N = p.length();
int M = s.length();
int dp[N+1][M+1];
memset(dp,0,sizeof(dp));
dp[0][0] = 1;
for(int i=0;i<N;i++)
if(p[i] == '*') dp[i+1][0] = 1;
else break;
for(int i=1;i<=N;i++){
for(int j=1;j<=M;j++){
if(p[i-1] == '?' && dp[i-1][j-1]) dp[i][j] = 1;
if(p[i-1] == '*' && (dp[i-1][j] || dp[i][j-1] || dp[i-1][j-1]) ) dp[i][j] = 1;
if(p[i-1] == s[j-1] && dp[i-1][j-1]) dp[i][j] =1;
}
}
return dp[N][M] == 1;
}
};
字符串匹配算法详解
本文深入探讨了字符串匹配的两种核心思路:深度优先搜索(DFS)和动态规划(DP)。通过一个具体的C++实现案例,详细解析了如何使用动态规划解决模式匹配问题,包括对特殊字符'*'和'?'的处理策略。
1519

被折叠的 条评论
为什么被折叠?



