LeetCode5 最长回文子串

  1. 最长回文子串

题目说明

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

  • 示例 1:

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

  • 示例 2:

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


public String longestPalindrome(String s) {

        if(s==null||s.length()==1){
            return s;
        }

        
        int start = 0; int end = 0;
        for (int i = 0; i < s.length(); i++) {
            int len1 = expandAroundCenter(s,i,i);
            int len2 = expandAroundCenter(s,i,i+1); 
            int len = Math.max(len1,len2);
            if(len>(end-start)){
                end = i+len/2;
                start = i-(len-1)/2;
            }

        }
        return s.substring(start,end+1); // end+1,如果s的长度为0会越界
    }

    /**
     * 从left何right向两边寻找回文串
     * @param s
     * @param left
     * @param right
     * @return
     */
    public int expandAroundCenter(String s, int left, int right){
        while (left>=0&&right<s.length()&&s.charAt(left)==s.charAt(right)){
            left--;
            right++;
        }
        return right-left-1;
    }

复杂度分析

  • 时间复杂度:O(n^2)
    ),由于围绕中心来扩展回文会耗去 O(n) 的时间,所以总的复杂度为 O(n^2)。

  • 空间复杂度:O(1)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容