Golang.实现 给你一个字符串 s,找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
时间: 2023-05-25 19:04:04 浏览: 110
package main
import "fmt"
func longestPalindrome(s string) string {
n := len(s)
if n < 2 {
return s
}
// 初始化动态规划数组dp
dp := make([][]bool, n)
for i := range dp {
dp[i] = make([]bool, n)
}
for i := 0; i < n; i++ {
dp[i][i] = true
}
// 记录最长回文子串的起始位置和长度
start, maxLen := 0, 1
// 动态规划
for l := 2; l <= n; l++ {
for i := 0; i < n; i++ {
j := i + l - 1
if j >= n {
break
}
if s[i] != s[j] {
dp[i][j] = false
} else {
if l == 2 || dp[i+1][j-1] {
dp[i][j] = true
if l > maxLen {
maxLen = l
start = i
}
}
}
}
}
return s[start : start+maxLen]
}
func main() {
s := "babad"
fmt.Println(longestPalindrome(s)) // "bab" 或 "aba"
s = "cbbd"
fmt.Println(longestPalindrome(s)) // "bb"
s = "a"
fmt.Println(longestPalindrome(s)) // "a"
s = "ac"
fmt.Println(longestPalindrome(s)) // "a" 或 "c"
}
阅读全文