最长回文串

204 阅读1分钟

要求:

给定一个字符串s,找到s中最长的回文子串。

示例:

输入:"babad"
输出:"bab"
"aba"也可以

输入:"cbbd"
输出:"bb"

思路:

以某个元素为中心,分别计算偶数长度的回文最大长度和奇数的回文最大长度。

代码:

class Solution {
    private int index, len;
    
    public String longestPalindrome(String s) {
        if (s.length() < 2) {
            return s;
        }
        for (int i = 0; i < s.length() - 1; i++) {
            PalindromeHelper(s,i,i);
            PalindromeHelper(s,i,i+1);
        }
        return s.substring(index, index+len);
    }
    
    public void PalindromeHelper(String s, int l, int r) {
        while (l >= 0 && r < s.length() && s.charAt(l) == s.charAt(r)) {
            l--;
            r++;
        }
        if (len < r-l-1) {
            index = l + 1;
            len = r - l - 1;
        }
    }
}