题目描述


动态规划组成部分一:确定状态


子问题

动态规划二:转移方程

动态规划组成部分三:初始条件和边界情况

动态规划组成部分四:计算顺序

Java代码实现
public boolean isMatch(String s, String p) {
int m = s.length();
int n = p.length();
char[] ch1 = s.toCharArray();
char[] ch2 = p.toCharArray();
boolean[][] f = new boolean[m + 1][n + 1];
f[0][0] = true;
for (int i = 0; i <= m; i++)
for (int j = 1; j <= n; j++) {
if ((ch2[j - 1] != '*') && (i > 0)) {
if (ch1[i - 1] == ch2[j - 1])
f[i][j] = f[i - 1][j - 1];
else if (ch2[j - 1] == '.')
f[i][j] = f[i - 1][j - 1];
} else if ((ch2[j - 1] == '*') && (j >= 2)) {
if ((i > 0) && ((ch2[j - 2] == '.') || (ch1[i - 1] == ch2[j - 2])))
f[i][j] = f[i - 1][j];
f[i][j] |= f[i][j - 2];
}
}
return f[m][n];
}
注意
编写代码的时候一定要注意i和j的数组越界问题,由于i是从0开始的,而j是从1开始的,要注意一定不要数组越界。

该博客探讨了一种使用动态规划解决字符串匹配问题的方法。代码示例展示了如何在Java中实现这一算法,通过建立状态转移矩阵来处理字符匹配,特别处理了通配符'*'的情况。博客强调了在编写代码时注意数组越界问题的重要性。

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



