我正在尝试找到字符串s
的两个非重叠回文子序列a
和b
的最大乘积。我编写了下面的代码,但它没有给出正确的输出:
public static int max(String s) {
int[][] dp = new int[s.length()][s.length()];
for (int i = s.length() - 1; i >= 0; i--) {
dp[i][i] = 1;
for (int j = i+1; j < s.length(); j++) {
if (s.charAt(i) == s.charAt(j)) {
dp[i][j] = dp[i+1][j-1] + 2;
} else {
dp[i][j] = Math.max(dp[i+1][j], dp[i][j-1]);
}
}
}
return dp[0][s.length()-1];
}
对于输入字符串 "acdapmpomp",我们可以选择 a
= "aca" 和 b
= "pmpmp" 来获得分数为 3 * 5 = 15 的最大乘积。但是我的程序输出为 5。
for (int i = s.length() - 1; i >= 0; i--) { dp[i][i] = 1;
这个初始化不应该与处理循环分开吗? - Naman