最长回文串

18 阅读1分钟

image.png

中心扩展法

func longestPalindrome(s string) string {
    var index, maxLength int
    //中心扩展法
    for i := 0; i < len(s); i++ {
        len1 := expand(s, i, i)
        len2 := expand(s, i, i+1)
        //求两个整数最大值
        val := maxInt(len1, len2)
        if val > maxLength {
            //已知中点或中点左1和长度,求起始位置i-(val-1)/2
            index, maxLength = i-(val-1)/2, val
        }
    }
    return s[index : index+maxLength]
}

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

func maxInt(x, y int) int {
    if x > y {
        return x
    }
    return y
}