PIQ07: Longest Palindromic Subsequence

来源:互联网 发布:滨州行知中学官网 编辑:程序博客网 时间:2024/05/01 15:13

Problem Statement

Given a string S, Find the length of the longest palindromic subsequence.

Approach 1

Reverse S to T, then make use of the Longest Common Subsequence algorithm.

Approach 2

Dynamic programming.

def longest_palindromic_subsequence(s):    if not s:        return 0    n = len(s)    lps_len = 0    dp = [[0 for i in xrange(n)] for j in xrange(n)]    for i in xrange(n):        dp[i][i] = 1    for i in xrange(n - 1):        if s[i] == s[i + 1]:            dp[i][i + 1] = 2            lps_len = max(lps_len, dp[i][i + 1])        else:            dp[i][i + 1] = 1    for length in xrange(3, n + 1):        for start in xrange(n - length + 1):            end = start + length - 1            if s[start] == s[end]:                dp[start][end] = 2 + dp[start + 1][end - 1]             else:                dp[start][end] = max(dp[start + 1][end], dp[start][end - 1])            lps_len = max(lps_len, dp[start][end])    return lps_len

Analysis: O(n2) time complexity, O(n2) space complexity.

0 0