public boolean isMatch(String s, String p) {
int m = s.length();
int n = p.length();
boolean[][] dp = new boolean[m + 1][n + 1];//s的前i个与p的前j个是否匹配
dp[0][0] = true;
//s的头部空字符串可以匹配p前面的连续'*'
for (int i = 0; i < n; i++) {
if(p.charAt(i)=='*')
dp[0][i+1]=dp[0][i];
}
//遍历s和p的每个字符
for (int i = 0; i < m; i++) {
for (int j = 0; j <n ; j++) {
//对于s中每个字符,'*'可以不匹配,也可以匹配一个
if(p.charAt(j)=='*')
dp[i+1][j+1]=dp[i+1][j]||dp[i][j+1];
else if(p.charAt(j)=='?'||p.charAt(j)==s.charAt(i))
dp[i+1][j+1]=dp[i][j];
}
}
return dp[m][n];
}
动态规划算法leetcode.44
最新推荐文章于 2024-10-01 04:50:10 发布
该博客探讨了一种使用动态规划解决字符串匹配问题的方法。通过建立一个二维布尔数组,记录了字符串`s`的前`i`个字符与模式字符串`p`的前`j`个字符是否匹配的情况。特别地,处理模式串中的通配符'*',允许它匹配零个或多个字符。在遍历字符串的过程中,判断当前字符是否匹配,逐步填充动态规划数组。最后返回`s`和`p`是否完全匹配的结果。
摘要由CSDN通过智能技术生成