Skip to content

Latest commit

 

History

History
68 lines (47 loc) · 1.89 KB

0516-longest-palindromic-subsequence.adoc

File metadata and controls

68 lines (47 loc) · 1.89 KB

516. 最长回文子序列

给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。

子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。

示例 1:

输入:s = "bbbab"
输出:4
解释:一个可能的最长回文子序列为 "bbbb" 。

示例 2:

输入:s = "cbbd"
输出:2
解释:一个可能的最长回文子序列为 "bb" 。

提示:

  • 1 <= s.length <= 1000

  • s 仅由小写英文字母组成

思路分析

在推演转移方程时,一个很大的误区是从 dp 矩阵视角去看。因为这是处理字符串,从一维字符串字符坐标去看,会更加清楚明了。如下图:

{image_attr}

根据代码流程来看,整个处理流程是从字符串的右边向左处理,相当于在“结尾”中寻找回文子串。所以,相关遍历只涉及的矩阵的左上方一半,从最下一行向上,逐行遍历。

一刷
link:{sourcedir}/_0516_LongestPalindromicSubsequence.java[role=include]

参考资料

  1. 516. 最长回文子序列 - 官方题解

  2. 516. 最长回文子序列 - 动态规划,四要素 — 该评论详细解释了如何处理奇偶回文的。