我试图找到两个不重叠的回文子串的最大乘积 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];
}
对于输入字符串“acdappomp”,我们可以选择 a
=“aca”和 b
=“pmp”得到得分3*5=15的最大乘积。但我的程序输出为5。
3条答案
按热度按时间pbgvytdp1#
首先要遍历dp表,用自下而上的方法找出最长回文子序列的长度,然后用dp[i][j]乘以dp[j+1][n-1]来计算最大积:下面是c++中的代码;
iyfamqjs2#
}
kmpatx3s3#
您的算法返回的是一个沼泽地的最大长度,而不是两个长度乘积的最大值。
更新
下面是一个可能的解决方案: