每日一题 2019 - 02 - 04
题目:
Given a string s, find the longest palindromic subsequence’s length in s. You may assume that the maximum length of s is 1000.
Example 1:
Input:
1 | "bbbab" |
Output:
1 | 4 |
One possible longest palindromic subsequence is “bbbb”.
Example 2:
Input:
1 | "cbbd" |
Output:
1 | 2 |
One possible longest palindromic subsequence is “bb”.
解法:
这个题是让我们找出给定字符串中最长的回文数序列的长度,回文序列也即:字符串从前往后遍历与从后往前遍历得到的字符顺序是一样的。
这个题也是一个动态规划的题:
设两个指针i,j
,从字符串头开始往后遍历:
- 如果s[i] == s[j] ,那么bp[i][j] = bp[i+1][j-1]+2,举个例子解释这个递推式子,比如
abba
这个序列,可以知道最大回文序列长度是4
,但是这个4
是通过bb
找到的,也即找到了bb
的前面与后面都是a
,进而在bb
的基础上加上了2
- 如果s[i]!=s[j],那么bp[i][j] = max(bp[i+1][j],bp[i][j-1]),举个例子解释这个递推式子,比如
abbc
这个序列,可以知道最大回文序列长度是2
,这个2
是通过bb
找到的,但是我们在找c
位置时候,发现a
、c
并不匹配,那么我们就需要把bp[i][j]位置设为前面长度最大的2
代码:
1 |
|