Leetcode 5. 最长回文子串

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

示例 1:

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

输入:s = "cbbd"
输出:"bb"

这里可以采用中心扩散的方法:从一个字符出发向两边扩散,要注意的是基数和偶数的问题,所以每次扩散需要从一个字符出发或者从两个字符出发。

代码如下:

public String longestPalindrome(String s) {
        int maxLen = 0;
        int start=0, end=0;
        for(int i=0;i<s.length();++i) {
            int len1=expand(s, i, i);
            int len2=expand(s, i, i+1);
            int len = Math.max(len1, len2);
            if(end-start+1 < len) {
                start = i-(len-1)/2;
                end = i+len/2;
            }
        }
        return s.substring(start, end+1);
    }

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

最后的执行结果:

image.png