5. 最长回文子串

小豆丁 1年前 ⋅ 749 阅读
5. 最长回文子串
给你一个字符串 s,找到 s 中最长的回文子串。

 

示例 1:

输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:

输入:s = "cbbd"
输出:"bb"

解析

时间复杂度降不下来,O(N2) 。我们从每一个字符开始,向左右两边进行扩展,需要注意的是区分奇数和偶数,这两种情况都要算进去。

class Solution {
    int index = -1,len = 0;
    public String longestPalindrome(String s) {
        if(s==null||s.length()<2) return s;
        for(int i = 0 ; i < s.length();i++){
            helper(s,i,i);
            helper(s,i,i+1);
        }

        return s.substring(index,index+len);
    }
    public void helper(String s,int left,int right){
        while(left>=0&&right<s.length()&&s.charAt(left)==s.charAt(right)){
            left--;
            right++;
        }
        if(len<(right-1-(left+1)+1)){
            index = left+1;
            len = right-left-1;
        }
    }
}