Longest Palindromic Subsequence - 最长回文子序列


问题

序列的回文子序列是原序列的子集,元素在原序列中是连续的,回文子序列的前半段和后半段是颠倒的(倒序的前半段与后半段相同)。例如的回文子序列有

求序列的最长回文子序列。

解法

设序列长度为(数组从开始,范围)。设表示是否为回文子序列,则有状态转移方程:

初始化,对于单个元素,显然单个元素可以作为一个最短的回文子序列,即,其他则初始化为

对于子序列,若其为回文子序列且则扩展后也是回文子序列,若不是回文子序列或也不是回文子序列;

遍历所有找出最大值,即为最长回文子序列。该算法的时间复杂度为


LeetCode

leetcode-5.cpp


源码

LongestPalindromicSubsequence.h

LongestPalindromicSubsequence.cpp

测试

LongestPalindromicSubsequenceTest.cpp