func longestPalindrome(s string) string {
str:= s
b := make([]byte, 2*len(str)+2)
p := make([]int,2*len(str)+2)
b[0] = '!'
b[1] = '#'
right, center, maxlen, maxcenter := 0, 0, 1, 0
for i := 0; i < len(str); i++ {
b[2*i+2] = str[i]
b[2*i+3] = '#'
}
for i := 0; i < len(b); i++ {
mirror:=0
if center>=1{
mirror= 2*center - 1
}
if i > right {
p[i] = 1
} else {
if mirror>len(b)-1{
mirror=len(b)-1
}
p[i] = min(right-i, p[mirror])
}
for{
if i+p[i]>=len(b){
break
}
if i-p[i]<0 || b[i+p[i]]!=b[i-p[i]] {
break
}
p[i]+=1
}
if p[i]+i>right{
right=p[i]+i
center=i
}
if maxlen<p[i]{
maxlen=p[i]
maxcenter=i
}
}
start:=(maxcenter-p[maxcenter])/2
return (str[start:start+maxlen-1])
}
func min(vals ...int) int {
var min int
for _, val := range vals {
if min == 0 || val <= min {
min = val
}
}
return min
}
12-25
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交