java为什么我的最长回文子串的DP算法很慢
嗨,我正在尝试解决LeetCode问题5最长回文子串。我使用的是DP策略,如果是奇数回文,我将DP表中的值增加2,如果是偶数回文,我将其增加1;我会记录表中最大的值。我认为我的策略只是O(n^2),但运行时间非常长,需要280毫秒。 我试图通过实现一个StringBuilder并自己附加它来改进subString()方法,但没有多大帮助。我真的不知道为什么要花这么长时间来运行我的代码。请帮忙
class Solution {
public String longestPalindrome(String s) {
int size = s.length();
int dp[][] = new int[size][size];
int len = 1;
int maxI=0;
int maxJ=0;
StringBuilder sb=new StringBuilder("");
for (int j = 0; j < size; j++) {
for (int i = 0; i <= j; i++) {
if (i == j) {
dp[i][j] = 1;
} else if(i<j){
if(s.charAt(i) == s.charAt(j)){
if((dp[i + 1][j - 1] > 0)){
dp[i][j] = dp[i + 1][j - 1] + 2;
}if((dp[i][j-1] == 1)){
dp[i][j] = 2;
}
}else {
dp[i][j] = 0;
}
}
if ( len<dp[i][j]||(len==dp[i][j] && j>maxJ) ){
len = dp[i][j];
maxI= i;
maxJ=j;
}
}
}
return s.substring(maxI, maxJ+1);
}
}
共 (0) 个答案