牛客题霸 NC17 最长回文子串
Posted Starzkg
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了牛客题霸 NC17 最长回文子串相关的知识,希望对你有一定的参考价值。
https://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6
解决方案
Go
Manacher(马拉车)算法
func getLongestPalindromeManacher(A string, n int) int {
// write code here
if n <= 1 {
return n
}
ss := "$#"
for i := 0; i < n; i++ {
ss = ss + A[i:i+1] + "#"
}
ss = ss + "`"
l := len(ss)
p := make([]int, l)
max_str := ""
mx := 0
center := 0
for i := 1; i < l-1; i++ {
if mx > i {
j := 2*center - i
if p[j] < mx-i {
p[i] = p[j]
} else {
p[i] = mx - i
}
}
for pj := p[i] + 1; ss[i-pj] == ss[i+pj]; pj++ {
p[i]++
}
if p[i] > mx {
center = i
mx = i + p[i]
}
if 2*p[i]+1 > len(max_str) {
max_str = ss[i-p[i] : i+p[i]+1]
}
}
return len(max_str)/2
}
参考文章
以上是关于牛客题霸 NC17 最长回文子串的主要内容,如果未能解决你的问题,请参考以下文章