字符串中最长的回文字符串

//给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 
// 示例 1: 
// 输入: "babad"
//输出: "bab"
//注意: "aba" 也是一个有效答案。
// 示例 2: 
// 输入: "cbbd"
//输出: "bb" 
// Related Topics 字符串 动态规划 
// 中心法,从中间往两侧递推时间复杂度(O(n2))
public String longestPalindrome(String s) {
    char[] chars = s.toCharArray();
    String str = "";
    //从左开始往右侧遍历找
    for (int i = 0;i<chars.length;i++){
        int j = 1;
        while (i+j<chars.length && i-j>=0){//没到结尾就可以继续  
            //如果字符串全部为回文直接返回
            if (i+2*j >= str.length())return s;
            //判断中间往左右两个字符是否相同,不同是判断是否比之前最大的大,如果大则更新
            if (!(chars[i+j] == chars[i-j])){
                if (2*j+1>str.length()) {
                    str = s.substring(i-j+1,i+j);
                    break;
                }
            }
            j++;
        }
    }
    return str;
}

猜你喜欢

转载自blog.csdn.net/caihongmeimeis/article/details/110546962