LeetCode 5 最长回文子串

题目:

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

解题:

遍历找出左右对称的字符串

代码:

func longestPalindrome(s string) string {
    l := len(s)
    var ss string
    for i, _ := range s {
        for j := 0; j <= i; j++ {
            if i+j < l && s[i+j] == s[i-j] {
                if j*2+1 > len(ss) {
                    ss = s[i-j : i+j+1]
                }
            } else {
                break
            }
        }
        for j := 1; j <= i; j++ {
            if i > 0 && i+j-1 < l && s[i+j-1] == s[i-j] {
                if j*2 > len(ss) {
                    ss = s[i-j : i+j]
                }
            } else {
                break
            }
        }
    }
    return ss
}

官方解答:


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


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

同样的解题思路,官方时间是我的三分之一,看来自己代码水平还有待提高

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注