leetcode 第5题 最长回文子串

90 阅读1分钟

题目:给你一个字符串 s,找到 s 中最长的回文子串。leetcode题目链接

我的JavaScript解法

var longestPalindrome = function(s) {
    const palindrome = (s, left, right) => {
        while (left >=0 && right < s.length && s[left] === s[right]) {
            left--;
            right++;
        }
        return s.substring(left+1, right)
    }
    let longest = ''
    for(let i = 0; i < s.length; i++) {
        const s1 = palindrome(s, i, i);
        const s2 = palindrome(s, i, i+1);
        longest = longest.length > s1.length ? longest : s1;
        longest = longest.length > s2.length ? longest : s2;
    }
    return longest
};

解析: 把字符串的每一个字符都设定为中心并用枚举所有的“回文中心”并尝试扩充,直到无法扩充。 需要特殊解释的是,当回文长度为奇数时,palindrome(s, i, i); 当回文长度为偶数时,palindrome(s, i, i+1);

复杂度分析:

  • 时间复杂度:O(n2)O(n^2)
  • 空间复杂度:O(1)O(1)