牛客题霸 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 最长回文子串的主要内容,如果未能解决你的问题,请参考以下文章

牛客题霸 NC26 括号生成

牛客题霸 NC18 顺时针旋转矩阵

牛客题霸 NC23 划分链表

牛客题霸 NC12 重建二叉树

牛客题霸 NC2 重排链表

牛客题霸 NC28 最小覆盖子串