最长回文子串

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

 

示例 1:

输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:

输入:s = "cbbd"
输出:"bb"
 

提示:

1 <= s.length <= 1000
s 仅由数字和英文字母组成

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

对称的字符串是回文子串,比如:aa,aba,abba

中心扩展算法

func center(s string, left, right int) (int, int) {
    for left >= 0 && right < len(s) && s[left] == s[right] {
        left -= 1
        right += 1
    }
    return left + 1, right - 1
}

func longestPalindrome(s string) string {
    if len(s) <= 1 {
        return s
    }
    start := 0
    end := 0
    for i := 0; i < len(s); i++ {
        left1, right1 := center(s, i, i)
        left2, right2 := center(s, i, i+1)
        if right1-left1 > end-start {
            start = left1
            end = right1
        }
        if right2-left2 > end-start {
            start = left2
            end = right2
        }
    }
    return s[start : end+1]
}

结束!

posted @ 2022-04-24 22:47  aaronthon  阅读(18)  评论(0编辑  收藏  举报