LeetCode-day5-最长回文子串(中等)

问题描述

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

示例

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

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

题解

思路 中心扩展法

  • 选择当前遍历的字节为中心比较左右的字节是否相等
  • 因为字符串的长度可能为奇数或者偶数,所以我们需要从遍历的字节两端的字节开始,或者从遍历的字节和后一个字节中间开始
public String longestPalindrome(String s) {
    if (s == null || s.length() < 1) return "";
    int start = 0, 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) {
            start = i - (len - 1) / 2;
            end = i + len / 2;
        }
    }
    return s.substring(start, end + 1);
}

private int expandAroundCenter(String s, int left, int right) {
    int L = left, R = right;
    while (L >= 0 && R < s.length() && s.charAt(L) == s.charAt(R)) {
        L--;
        R++;
    }
    return R - L - 1;
}
  • 时间复杂度 O(n^2)
  • 空间复杂度 O(1)

LeetCode题目地址

posted @ 2020-05-19 16:34  丢了蜡笔的小鑫  阅读(112)  评论(0)    收藏  举报

载入天数...载入时分秒...