动态规划,使用二维数组存储中间状态:
func longestPalindrome(s string) string {
n := len(s)
if n < 2 {
return s
}
start := 0
// end := 0
maxLen := 1
dp := make([][]bool, n)
for i := 0; i < len(dp); i++ {
dp[i] = make([]bool, n)
// dp[i][i] = true
}
for r := 1; r < n; r++ {
for l := r; l >= 0; l-- {
if s[r] == s[l] && (r-l<2 || dp[l+1][r-1]) {
dp[l][r] = true
if r-l+1 > maxLen {
start = l
// end = r
maxLen = r-l+1
}
}
}
}
return s[start:start+maxLen]
}