516. 最长回文子序列
给定一个字符串 s
,找到其中最长的回文子序列,并返回该序列的长度。不连续。可以假设 s
的最大长度为 1000
输入:
“bbbab”
输出:
4
//二维dp,时空On^2
func longestPalindromeSubseq(s string) int {
n := len(s)
dp := make([][]int, n+1)
for i := range dp {
dp[i] = make([]int, n+1)
dp[i][i] = 1
}
for i := n-1; i >= 0; i-- { //倒序遍历
for j := i+1; j < n; j++ {
if s[i] == s[j] {
dp[i][j] = dp[i+1][j-1] + 2
} else {
dp[i][j] = max(dp[i+1][j], dp[i][j-1])
}
}
}
return dp[0][n-1]
}
func max(x int, y int) int {
if x > y {
return x
}
return y
}