- 最长回文子串
题目说明
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
- 示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
- 示例 2:
输入: "cbbd"
输出: "bb"
public String longestPalindrome(String s) {
        if(s==null||s.length()==1){
            return s;
        }
        
        int start = 0; int end = 0;
        for (int i = 0; i < s.length(); i++) {
            int len1 = expandAroundCenter(s,i,i);
            int len2 = expandAroundCenter(s,i,i+1); 
            int len = Math.max(len1,len2);
            if(len>(end-start)){
                end = i+len/2;
                start = i-(len-1)/2;
            }
        }
        return s.substring(start,end+1); // end+1,如果s的长度为0会越界
    }
    /**
     * 从left何right向两边寻找回文串
     * @param s
     * @param left
     * @param right
     * @return
     */
    public int expandAroundCenter(String s, int left, int right){
        while (left>=0&&right<s.length()&&s.charAt(left)==s.charAt(right)){
            left--;
            right++;
        }
        return right-left-1;
    }
复杂度分析
- 时间复杂度:O(n^2) 
 ),由于围绕中心来扩展回文会耗去 O(n) 的时间,所以总的复杂度为 O(n^2)。
- 空间复杂度:O(1)