题目:

题解:
func shortestPalindrome(s string) string {
n := len(s)
fail := make([]int, n)
for i := 0; i < n; i++ {
fail[i] = -1
}
for i := 1; i < n; i++ {
j := fail[i - 1]
for j != -1 && s[j + 1] != s[i] {
j = fail[j]
}
if s[j + 1] == s[i] {
fail[i] = j + 1
}
}
best := -1
for i := n - 1; i >= 0; i-- {
for best != -1 && s[best + 1] != s[i] {
best = fail[best]
}
if s[best + 1] == s[i] {
best++
}
}
add := ""
if best != n - 1 {
add = s[best + 1:]
}
b := []byte(add)
for i := 0; i < len(b) / 2; i++ {
b[i], b[len(b) - 1 -i] = b[len(b) - 1 -i], b[i]
}
return string(b) + s
}









![[激光原理与应用-98]:南京科耐激光-激光焊接-焊中检测-智能制程监测系统IPM介绍 - 2 - 什么是激光器焊接](https://img-blog.csdnimg.cn/direct/cb6a02565e544d97a705d3a6dd7ddcc9.png)






![[C++][CMake][CMake基础]详细讲解](https://img-blog.csdnimg.cn/direct/8beb5fc35be346f5ae7b25a4c4eb4165.png)