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[0][n - 1]
}

func max(a, b int) int {
    if a > b {
        return a
    }
    return b
}

Last updated