LeetCode 5 最长回文子串

84 阅读1分钟
给你一个字符串 s,找到 s 中最长的回文子串。

 

示例 1:

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

输入:s = "cbbd"
输出:"bb"
示例 3:

输入:s = "a"
输出:"a"
示例 4:

输入:s = "ac"
输出:"a"
 

提示:

1 <= s.length <= 1000
s 仅由数字和英文字母(大写和/或小写)组成
class Solution {
    public String longestPalindrome(String s) {
        if(s.length() == 0) return s;
        int res = 1;
        int ll = 0;
        int rr = 0;
        // 回文子串分奇数和偶数个,分开考虑  
        for(int i = 0 ; i< s.length();i++){
            // 奇数个的情况向两边扩散
            int l = i-1;
            int r = i+1;
            while(l>=0 && r<s.length() && s.charAt(l) == s.charAt(r)){
                int len = (r-l+1);
                if(len > res){
                   res = len;
                    ll = l;
                    rr = r;
                }
                l--;
                r++;
            }
            // 偶数个的情况向两边扩散
            l = i;
            r = i+1;
            while(l>=0 && r<s.length() && s.charAt(l) == s.charAt(r)){
                int len = (r-l+1);
                if(len > res){
                    res = len;
                    ll = l;
                    rr = r;
                }
                l--;
                r++; 
                }
        }
            return s.substring(ll,rr+1);
    }
    
}

image.png