Leetcode刷题java之5. 最长回文子串

执行结果:

通过

显示详情

执行用时 :12 ms, 在所有 Java 提交中击败了72.89% 的用户

内存消耗 :36.4 MB, 在所有 Java 提交中击败了68.95%的用户

题目:

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例 1:

输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。


示例 2:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-substring
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路:

采用中心扩展法,每找到一个更长的,就更新,但是中心有多少个呢,有2n-1个,为什么不是n个呢,因为aba和abba是两种情况,但是他们都是回文串。

代码:

class Solution {
    public String longestPalindrome(String s) {
        if(s==null||s.length()<1)
        {
            return "";
        }
        //采用中心扩展算法
        int start=0;
        int end=0;
        for(int i=0;i<s.length();i++)
        {
            int len1=help(s,i,i);
            int len2=help(s,i,i+1);
            int len=Math.max(len1,len2);
            if(len>end-start)
            {
                start=i-(len-1)/2;
                end=i+len/2;
            }
        }
        //取子字符串后面的string的s是小写的
        return s.substring(start,end+1);
    }
    public int help(String s,int left,int right)
    {
        while(left>=0&&right<=s.length()-1&&s.charAt(left)==s.charAt(right))
        {
            left--;
            right++;
        }
        return right-left-1;
    }
}
发布了438 篇原创文章 · 获赞 440 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/qq_41901915/article/details/104172781