[LeetCode]5. 最长回文子串

给你一个字符串 s,找到 s 中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。

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

中心扩散法
枚举一个中心,一个点或两个相邻的点,向两侧扩展

func longestPalindrome(s string) string {
    l, r := 0, 0
    for i := 0;i < len(s);i++ {
        l1, r1 := expand(i, i, s)
        l2, r2 := expand(i, i + 1, s)
        if r1 - l1 > r - l {
            l = l1
            r = r1
        }
        if r2 - l2 > r - l {
            l = l2
            r = r2
        }
    }
    return s[l : r + 1]
}
func expand(l, r int, s string) (int, int) {
    for l >= 0 && r < len(s) && s[l] == s[r] {
        l --
        r ++ 
    }
    return l+1, r-1
}
posted @ 2023-02-26 19:58  Zforw  阅读(14)  评论(0编辑  收藏  举报