123456789101112131415161718192021222324252627282930313233 |
- import (
- "strings"
- )
- func shortestPalindrome(s string) string {
- l := len(s)
- if l <= 1 {
- return s
- }
- var i, j int
- for i = l; i <= 2*l; i++ { // i means the length of the shortest palindrome
- if i%2 == 1 { // Odd
- for j = 1; 0 <= l-1-i/2-j && s[l-1-i/2-j] == s[l-1-i/2+j]; j++ {
- }
- if l-1-i/2-j < 0 {
- break
- }
- } else { // Even
- for j = 1; 0 <= l-i/2-j && s[l-i/2-j] == s[l-1-i/2+j]; j++ {
- }
- if l-i/2-j < 0 {
- break
- }
- }
- }
- idx := l - 1 - i/2 + j
- var ans strings.Builder
- for i := l-1; idx <= i; i-- {
- ans.WriteByte(s[i])
- }
- ans.WriteString(s)
- return ans.String()
- }
|