# 516. Longest Palindromic Subsequence

Medium
Given a string `s`, find the longest palindromic subsequence's length in `s`.
A subsequence is a sequence that can be derived from another sequence by deleting some or no elements without changing the order of the remaining elements.
Example 1:
Input: s = "bbbab"
Output:
4
Explanation:
One possible longest palindromic subsequence is "bbbb".
Example 2:
Input: s = "cbbd"
Output:
2
Explanation:
One possible longest palindromic subsequence is "bb".
Constraints:
• `1 <= s.length <= 1000`
• `s` consists only of lowercase English letters.

### 解題

func longestPalindromeSubseq(s string) int {
n := len(s)
dp := make([][]int, n)
for i := 0; i < len(dp); i++ {
dp[i] = make([]int, n)
}
for i := 0; i < len(dp); i++ {
dp[i][i] = 1
}
for l := 1; l <= n; l++ {
for i := 0 ; i <= n - l ; i++ {
j := i + l - 1
if i == j {
dp[i][j] = 1
continue
}
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])
}
//dp[i][j] = index i ~ j 字串最長回文(含 i 和 j )
}
}
return dp[n - 1]
}
func max(a, b int) int {
if a > b {
return a
}
return b
}