题解 | #最长回文子串#TOP73

abcd ,判断a和d是否相等,中间0 、 1 个数,那么就是回文,否则中间bc是回文,abcd就是回文

import java.util.*;

public class Solution {
    public int getLongestPalindrome(String A) {
        // write code here
        if (A == null) {
            return 0;
        }
        if (A.length() <= 1) {
            return A.length();
        }
        int n = A.length();
        char[] data = A.toCharArray();
        int right = 0, left = 0;
        //dp[i][j] 表示i到 j是否有回文子串
        boolean[][] dp = new boolean[data.length][data.length];

        //从后往前遍历 第一次遍历 (n-2 , n-1)是否是回文
        //第二次 (n-3, n-2) 是不是回文(n-3, n-1)是不是回文
        for (int i = n - 2; i >= 0; i--) {
            dp[i][i] = true;
            for (int j = i + 1; j < data.length; j++) {
                //是回文  i .. j
                if (data[i] == data[j] &&
                        //i j ,i x j, 两种情况
                        (j - i  < 3  ||
                         // i x x j,
                         ( dp[i + 1][j - 1]))) {
                    dp[i][j] = true;
                }

                if (dp[i][j] && (right - left) < (j - i)) {
                    left = i;
                    right = j;
                }

            }
        }
        return right - left + 1;
    }
}
全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务