File tree Expand file tree Collapse file tree 5 files changed +128
-0
lines changed
Problemset/0516-Longest Palindromic Subsequence Expand file tree Collapse file tree 5 files changed +128
-0
lines changed Original file line number Diff line number Diff line change
1
+ # 516. Longest Palindromic Subsequence
2
+ Given a string ` s ` , find * the longest palindromic ** subsequence** 's length in* ` s ` .
3
+
4
+ A ** subsequence** is a sequence that can be derived from another sequence by deleting some or no elements without changing the order of the remaining elements.
5
+
6
+ #### Example 1:
7
+ <pre >
8
+ <strong >Input:</strong > s = "bbbab"
9
+ <strong >Output:</strong > 4
10
+ <strong >Explanation:</strong > One possible longest palindromic subsequence is "bbbb".
11
+ </pre >
12
+
13
+ #### Example 2:
14
+ <pre >
15
+ <strong >Input:</strong > s = "cbbd"
16
+ <strong >Output:</strong > 2
17
+ <strong >Explanation:</strong > One possible longest palindromic subsequence is "bb".
18
+ </pre >
19
+
20
+ #### Constraints:
21
+ * ` 1 <= s.length <= 1000 `
22
+ * ` s ` consists only of lowercase English letters.
23
+
24
+ ## Solutions (Rust)
25
+
26
+ ### 1. Solution
27
+ ``` Rust
28
+ impl Solution {
29
+ pub fn longest_palindrome_subseq (s : String ) -> i32 {
30
+ let s = s . as_bytes ();
31
+ let mut dp = vec! [vec! [0 ; s . len ()]; s . len ()];
32
+
33
+ for i in 0 .. s . len () {
34
+ dp [i ][i ] = 1 ;
35
+ }
36
+
37
+ for size in 2 ..= s . len () {
38
+ for i in 0 .. s . len () - size + 1 {
39
+ dp [i ][i + size - 1 ] =
40
+ dp [i + 1 ][i + size - 2 ] + (s [i ] == s [i + size - 1 ]) as i32 * 2 ;
41
+ dp [i ][i + size - 1 ] = dp [i ][i + size - 1 ]
42
+ . max (dp [i ][i + size - 2 ])
43
+ . max (dp [i + 1 ][i + size - 1 ]);
44
+ }
45
+ }
46
+
47
+ dp [0 ][s . len () - 1 ]
48
+ }
49
+ }
50
+ ```
Original file line number Diff line number Diff line change
1
+ # 516. 最长回文子序列
2
+ 给你一个字符串 ` s ` ,找出其中最长的回文子序列,并返回该序列的长度。
3
+
4
+ 子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。
5
+
6
+ #### 示例 1:
7
+ <pre >
8
+ <strong >输入:</strong > s = "bbbab"
9
+ <strong >输出:</strong > 4
10
+ <strong >解释:</strong > 一个可能的最长回文子序列为 "bbbb" 。
11
+ </pre >
12
+
13
+ #### 示例 2:
14
+ <pre >
15
+ <strong >输入:</strong > s = "cbbd"
16
+ <strong >输出:</strong > 2
17
+ <strong >解释:</strong > 一个可能的最长回文子序列为 "bb" 。
18
+ </pre >
19
+
20
+ #### 提示:
21
+ * ` 1 <= s.length <= 1000 `
22
+ * ` s ` 仅由小写英文字母组成
23
+
24
+ ## 题解 (Rust)
25
+
26
+ ### 1. 题解
27
+ ``` Rust
28
+ impl Solution {
29
+ pub fn longest_palindrome_subseq (s : String ) -> i32 {
30
+ let s = s . as_bytes ();
31
+ let mut dp = vec! [vec! [0 ; s . len ()]; s . len ()];
32
+
33
+ for i in 0 .. s . len () {
34
+ dp [i ][i ] = 1 ;
35
+ }
36
+
37
+ for size in 2 ..= s . len () {
38
+ for i in 0 .. s . len () - size + 1 {
39
+ dp [i ][i + size - 1 ] =
40
+ dp [i + 1 ][i + size - 2 ] + (s [i ] == s [i + size - 1 ]) as i32 * 2 ;
41
+ dp [i ][i + size - 1 ] = dp [i ][i + size - 1 ]
42
+ . max (dp [i ][i + size - 2 ])
43
+ . max (dp [i + 1 ][i + size - 1 ]);
44
+ }
45
+ }
46
+
47
+ dp [0 ][s . len () - 1 ]
48
+ }
49
+ }
50
+ ```
Original file line number Diff line number Diff line change
1
+ impl Solution {
2
+ pub fn longest_palindrome_subseq ( s : String ) -> i32 {
3
+ let s = s. as_bytes ( ) ;
4
+ let mut dp = vec ! [ vec![ 0 ; s. len( ) ] ; s. len( ) ] ;
5
+
6
+ for i in 0 ..s. len ( ) {
7
+ dp[ i] [ i] = 1 ;
8
+ }
9
+
10
+ for size in 2 ..=s. len ( ) {
11
+ for i in 0 ..s. len ( ) - size + 1 {
12
+ dp[ i] [ i + size - 1 ] =
13
+ dp[ i + 1 ] [ i + size - 2 ] + ( s[ i] == s[ i + size - 1 ] ) as i32 * 2 ;
14
+ dp[ i] [ i + size - 1 ] = dp[ i] [ i + size - 1 ]
15
+ . max ( dp[ i] [ i + size - 2 ] )
16
+ . max ( dp[ i + 1 ] [ i + size - 1 ] ) ;
17
+ }
18
+ }
19
+
20
+ dp[ 0 ] [ s. len ( ) - 1 ]
21
+ }
22
+ }
Original file line number Diff line number Diff line change 349
349
[ 513] [ 513l ] |[ Find Bottom Left Tree Value] [ 513 ] |![ py]
350
350
[ 514] [ 514l ] |[ Freedom Trail] [ 514 ] |![ rs]
351
351
[ 515] [ 515l ] |[ Find Largest Value in Each Tree Row] [ 515 ] |![ py]
352
+ [ 516] [ 516l ] |[ Longest Palindromic Subsequence] [ 516 ] |![ rs]
352
353
[ 518] [ 518l ] |[ Coin Change 2] [ 518 ] |![ rs]
353
354
[ 519] [ 519l ] |[ Random Flip Matrix] [ 519 ] |![ py]
354
355
[ 520] [ 520l ] |[ Detect Capital] [ 520 ] |![ rs]
1935
1936
[ 513 ] :Problemset/0513-Find%20Bottom%20Left%20Tree%20Value/README.md#513-find-bottom-left-tree-value
1936
1937
[ 514 ] :Problemset/0514-Freedom%20Trail/README.md#514-freedom-trail
1937
1938
[ 515 ] :Problemset/0515-Find%20Largest%20Value%20in%20Each%20Tree%20Row/README.md#515-find-largest-value-in-each-tree-row
1939
+ [ 516 ] :Problemset/0516-Longest%20Palindromic%20Subsequence/README.md#516-longest-palindromic-subsequence
1938
1940
[ 518 ] :Problemset/0518-Coin%20Change%202/README.md#518-coin-change-2
1939
1941
[ 519 ] :Problemset/0519-Random%20Flip%20Matrix/README.md#519-random-flip-matrix
1940
1942
[ 520 ] :Problemset/0520-Detect%20Capital/README.md#520-detect-capital
3518
3520
[ 513l ] :https://leetcode.com/problems/find-bottom-left-tree-value/
3519
3521
[ 514l ] :https://leetcode.com/problems/freedom-trail/
3520
3522
[ 515l ] :https://leetcode.com/problems/find-largest-value-in-each-tree-row/
3523
+ [ 516l ] :https://leetcode.com/problems/longest-palindromic-subsequence/
3521
3524
[ 518l ] :https://leetcode.com/problems/coin-change-2/
3522
3525
[ 519l ] :https://leetcode.com/problems/random-flip-matrix/
3523
3526
[ 520l ] :https://leetcode.com/problems/detect-capital/
Original file line number Diff line number Diff line change 349
349
[ 513] [ 513l ] |[ 找树左下角的值] [ 513 ] |![ py]
350
350
[ 514] [ 514l ] |[ 自由之路] [ 514 ] |![ rs]
351
351
[ 515] [ 515l ] |[ 在每个树行中找最大值] [ 515 ] |![ py]
352
+ [ 516] [ 516l ] |[ 最长回文子序列] [ 516 ] |![ rs]
352
353
[ 518] [ 518l ] |[ 零钱兑换 II] [ 518 ] |![ rs]
353
354
[ 519] [ 519l ] |[ 随机翻转矩阵] [ 519 ] |![ py]
354
355
[ 520] [ 520l ] |[ 检测大写字母] [ 520 ] |![ rs]
1935
1936
[ 513 ] :Problemset/0513-Find%20Bottom%20Left%20Tree%20Value/README_CN.md#513-找树左下角的值
1936
1937
[ 514 ] :Problemset/0514-Freedom%20Trail/README_CN.md#514-自由之路
1937
1938
[ 515 ] :Problemset/0515-Find%20Largest%20Value%20in%20Each%20Tree%20Row/README_CN.md#515-在每个树行中找最大值
1939
+ [ 516 ] :Problemset/0516-Longest%20Palindromic%20Subsequence/README_CN.md#516-最长回文子序列
1938
1940
[ 518 ] :Problemset/0518-Coin%20Change%202/README_CN.md#518-零钱兑换-ii
1939
1941
[ 519 ] :Problemset/0519-Random%20Flip%20Matrix/README_CN.md#519-随机翻转矩阵
1940
1942
[ 520 ] :Problemset/0520-Detect%20Capital/README_CN.md#520-检测大写字母
3518
3520
[ 513l ] :https://leetcode.cn/problems/find-bottom-left-tree-value/
3519
3521
[ 514l ] :https://leetcode.cn/problems/freedom-trail/
3520
3522
[ 515l ] :https://leetcode.cn/problems/find-largest-value-in-each-tree-row/
3523
+ [ 516l ] :https://leetcode.cn/problems/longest-palindromic-subsequence/
3521
3524
[ 518l ] :https://leetcode.cn/problems/coin-change-2/
3522
3525
[ 519l ] :https://leetcode.cn/problems/random-flip-matrix/
3523
3526
[ 520l ] :https://leetcode.cn/problems/detect-capital/
You can’t perform that action at this time.
0 commit comments