最长回文子串

回文串就是正着读和反着读都一样的字符串。
比如说字符串abaabba都是回文串,因为它们对称,反过来还是和本身一样。反之,字符串abac就不是回文串。
可以看到回文串的的长度可能是奇数,也可能是偶数,这就添加了回文串问题的难度,解决该类问题的核心是双指针

寻找回文串的问题核心思想是:从中间开始向两边扩散来判断回文串

for 0 <= i < len(s):
    找到以 s[i] 为中心的回文串
    更新答案

但是呢,回文串的长度可能是奇数也可能是偶数,如果是abba这种情况,没有一个中心字符,上面的算法就没辙了。所以我们可以修改一下:

for 0 <= i < len(s):
    找到以 s[i] 为中心的回文串
    找到以 s[i] 和 s[i+1] 为中心的回文串
    更新答案

代码:

class Solution {
    public String longestPalindrome(String s) {
        String res=new String();
        for(int i=0;i<s.length();i++){
            String s1=palindrome(s,i,i);
            String s2=palindrome(s,i,i+1);

            res=res.length()>s1.length() ? res:s1;
            res=res.length()>s2.length() ? res:s2;

        }
        return res;
    }

    String palindrome(String s,int l,int r){
        while(l>=0&&r<s.length()&&s.charAt(l)==s.charAt(r)){
            l--;
            r++;
        }
        return s.substring(l+1,r);
    }
}

palindrome这个函数是用来返回从l,r开始向两边扩散的情况下可得到的回文串
而从主函数中可以通过输入i,i 还是 i,i+1 来应对奇数,偶数两种情况,非常巧妙。

原文地址:https://www.cnblogs.com/shiji-note/p/14502679.html