题目:
给你一个字符串 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
}
同样的解题思路,官方时间是我的三分之一,看来自己代码水平还有待提高