最长回文串 - 算法

思路:首先定义二维布尔类型的数组,然后初始化i == j 时候的值为true

从长度L为2开始到len,然后i从0到len,j从L + i - 1

i代表字符开始的位置,j代表字符结束的位置

如果s.i== s.j,此时如果L大于3的话,i和j的布尔值依赖于i + 1 和j - 1,如果L小于的话,则直接置为true,(说明此时的字符长度不长,小于3),

如果不相等的话,将dpij直接置为false

利用start保存i的值,maxLen保存L的值,如果maxLen< L时,需要将maxLen值更新,要判断一下j时候存在地址越界情况。

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param A string字符串 
     * @return int整型
     */
    public int getLongestPalindrome (String A) {
        // write code here
        int len = A.length();
        boolean[][] dp = new boolean[A.length()][A.length()];
        for (int i = 0; i < A.length(); i++) {
            dp[i][i] = true;
        }
        int start = 0, maxLen= 1;
        for (int L = 2; L <= len; L++) {
            for (int i = 0; i < len; i++) {
                int j = i + L - 1;
                if (j >= len) {
                    break;
                }
                if (A.charAt(i) == A.charAt(j)) {
                    if (L - 1 >= 3) {
                        dp[i][j] = dp[i + 1][j - 1];
                    } else {
                        dp[i][j] = true;
                    }
                } else {
                    dp[i][j] =  false;
                }
                if (dp[i][j]  && L > maxLen) {
                    start = i;
                    maxLen = L;
                }
            }
        }
        return amx;
    }
}

 

posted @ 2022-03-18 13:48  牵魂  阅读(37)  评论(0)    收藏  举报