最长回文子串

给定一个字符串 s,找到 s 中最长的回文子串。

function longestPalindrome(s) {
    if(s.length == 0){
        return s
    }
    let palindrome = s[0]
    for(let i = 0;i < s.length -1;i++){
        let item = s[i]
        let substr = item
        for(let j = i+1;j < s.length;j++){
            let jItem = s[j]
            substr += jItem
            if(substr.length == 2 && jItem == item && substr.length > palindrome.length){
                palindrome = substr
            }else{
                if(substr == substr.split('').reverse().join('') && substr.length > palindrome.length ){
                    palindrome = substr
                }
            }
        }
    }
    return palindrome
}

时间复杂度O(n2),Leecode提交未通过,超过时间限制。 

利用指针

const longestPalindrome = (str = 'cccabcdcbaa') => {
    const getStr = (s, l, r) => {
        while(l > -1 && r < s.length && s[l] === s[r]){
            l--
            r++
        }
        return s.substring(l + 1, r)
    }
    let res = ''
    for(let i = 0; i < str.length; i++){
        const s1 = getStr(str, i, i)
        const s2 = getStr(str, i, i + 1)
        res = res.length > s1.length ? res : s1
        res = res.length > s2.length ? res: s2
    }
    return res
}

  

posted @ 2020-06-21 16:51  671_MrSix  阅读(184)  评论(0编辑  收藏  举报