05 最長回文部分文字列の動的プログラミング

399509b195f4415a9cc7603539bf8dd5.jpg

 876857a5defc4380b8274c1c521c1e26.jpg

public String longestPalindrome(String s){
        int n =s.length();
        boolean[][] dp = new boolean[n][n];
        int maxLen = 1;
        int start = 0;
        for (int i = 0; i < n; i++) {
            dp[i][i]=true;
        }
        for (int i = 0; i < n-1; i++) {
            if (s.charAt(i)==s.charAt(i+1)){
                dp[i][i+1]=true;
                start=i;
                maxLen=2;
            }
        }
        for (int j = 2; j < n; j++) {
            for (int i = 0; i < j-1; i++) {
                if (s.charAt(i)==s.charAt(j) && dp[i+1][j-1]){
                    dp[i][j]=true;
                    if (j-i+1>maxLen){
                        maxLen=j-i+1;
                        start=i;
                    }
                }
            }
        }
        return s.substring(start,start+maxLen);
    }

おすすめ

転載: blog.csdn.net/qq_44950242/article/details/130473880