public boolean isMatch(String s, String p) {
int m = s.length();
int n = p.length();
boolean[][] f = new boolean[m + 1][n + 1];//s的前i个字符和p的前j个字符是否匹配
f[0][0] = true;//初始化
//s中第一个空字符可以匹配p中处于前面的带'*'的字符,匹配0个
for (int i = 0; i < n; i++) {
if(p.charAt(i)=='*')
f[0][i+1]=f[0][i-1];
}
//双层遍历s和p字符串
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
if (p.charAt(j) == '*') {
//对于每层i,在'*'的地方,都可以选择匹配0或1次,只要有成功的就为true
f[i+1][j+1] = f[i+1][j - 1];//'*'匹配s中的0个
//'*'匹配s中的1个,如果成功,那么就取决于上一层i在j层是否为true
if (matches(s, p, i, j-1)) {
f[i+1][j+1] = f[i+1][j+1] || f[i][j+1];
}
} else {
//遇到'.'或字母时,就取决于i-1层在j-1层的值
if (matches(s, p, i, j)) {
f[i+1][j+1] = f[i][j];
}
}
}
}
return f[m][n];
}
//判断s在i处是否匹配p在j处的字符
public boolean matches(String s, String p, int i, int j) {
if (p.charAt(j) == '.') //'.'匹配任意字符
return true;
return s.charAt(i) == p.charAt(j);
}
动态规划算法leetcode.10
最新推荐文章于 2022-08-04 21:28:25 发布
这篇文章详细讲解了如何使用动态规划实现字符串isMatch函数,通过分析 '*' 和 '.' 的匹配规则,展示了如何在 Java 中处理字符串模式匹配问题。关键步骤包括初始化矩阵、处理'*'字符和'.'字符,以及判断字符是否匹配。
摘要由CSDN通过智能技术生成