题解 | #最长回文子串#

最长回文子串

http://www.nowcoder.com/practice/b4525d1d84934cf280439aeecc36f4af

package main

func getLongestPalindrome( A string ,  n int ) int {
    start, end := 0, 0
    
    for i := range A {
        l, r := expand(A, i, i)     // 奇数的情况 
        if end - start < r - l {    // 如果有更大的边界值
            start, end = l, r
        }

        l, r = expand(A, i, i+1)    // 偶数的情况
        if end - start < r - l {    // 如果有更大的边界值
            start, end = l, r
        }
    }
    return end - start +1
}

// 围绕中心展开
func expand(A string, left, right int) (int, int) {
    // 这个是核心,给一个字符串+字符串左右边界,找出该范围内最长的回文字符串的左右边界
    for ; left >= 0 && right < len(A) && A[left] == A[right]; left, right = left - 1, right + 1 {
    }
    return left + 1, right - 1; // 上面的循环最后那块把多操作的加减回去
}

全部评论

相关推荐

头像
昨天 15:00
已编辑
算法工程师
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务