题目描述
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例2:
输入: "cbbd"
输出: "bb"
思路
1.可以使用中心扩展法来寻找此题的答案,而一个字符串的中心应该是2n-1个而不是n个,因为两个字母相同的话,该中心在其二者的“夹缝”中。
2.为了分割中心方便,我们可以将每个字母使用特殊符号分割,然后遍历整个字符串,最终寻找到最长子串。
Java代码实现
     public static String longestPalindrome(String s) {
        String str = "#";
        for (int i = 0; i < s.length(); i++) {
            str += s.charAt(i)+"#";
        }
        String longestStr = "";
        for (int i = 1; i < str.length(); i++) {
            String cur = longestPalindrome(str,i);
            if(longestStr.length()<cur.length())
                longestStr = cur;
        }
        return longestStr.replace("#","");
    }
    private static String longestPalindrome(String s,int index) {
        int left = index-1;
        int right = index+1;
        while(left>=0 && right<s.length()){
            if(s.charAt(left) == s.charAt(right)){
                left--;
                right++;
            }else {
                break;
            }
        }
        return s.substring(left+1,right);
    }