有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案