最长回文子串
给你一个字符串 s
,找到 s
中最长的 回文子串。
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd"
输出:"bb"
题解:
可参考 分割回文串,思想是完全相似的
func longestPalindrome(s string) string {
// dp[i][j] 记录 字符串从 i 到 j 回文串的长度
n := len(s)
dp := make([][]bool, n)
for i := 0; i < n; i++ {
dp[i] = make([]bool, n)
}
start, maxLen := 0, 1
for i := n - 1; i >= 0; i-- {
for j := i; j < n; j++ {
if s[i] == s[j] {
if j-i < 2 {
dp[i][j] = true
} else {
dp[i][j] = dp[i+1][j-1] && s[i] == s[j]
}
// dp[i][j] = s[i] == s[j] && dp[i+1][j-1]
// 更新最长回文串的起始位置和长度
if dp[i][j] && j-i+1 > maxLen {
start = i
maxLen = j - i + 1
}
}
}
}
return s[start : start+maxLen]
}