Longest Palindromic Subsequence - 最长回文子序列
问题
序列的回文子序列是原序列的子集,元素在原序列中是连续的,回文子序列的前半段和后半段是颠倒的(倒序的前半段与后半段相同)。例如的回文子序列有
求序列的最长回文子序列。
解法
设序列长度为(数组从开始,范围)。设表示是否为回文子序列,则有状态转移方程:
初始化,对于单个元素,显然单个元素可以作为一个最短的回文子序列,即,其他则初始化为;
对于子序列,若其为回文子序列且则扩展后也是回文子序列,若不是回文子序列或则也不是回文子序列;
遍历所有找出最大值,即为最长回文子序列。该算法的时间复杂度为。
LeetCode
源码
LongestPalindromicSubsequence.h
LongestPalindromicSubsequence.cpp