Skip to content

Commit 5439936

Browse files
committed
+ problem 516
1 parent 62464a7 commit 5439936

File tree

5 files changed

+128
-0
lines changed

5 files changed

+128
-0
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
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+
```
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
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+
```
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
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+
}

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,7 @@
349349
[513][513l] |[Find Bottom Left Tree Value][513] |![py]
350350
[514][514l] |[Freedom Trail][514] |![rs]
351351
[515][515l] |[Find Largest Value in Each Tree Row][515] |![py]
352+
[516][516l] |[Longest Palindromic Subsequence][516] |![rs]
352353
[518][518l] |[Coin Change 2][518] |![rs]
353354
[519][519l] |[Random Flip Matrix][519] |![py]
354355
[520][520l] |[Detect Capital][520] |![rs]
@@ -1935,6 +1936,7 @@
19351936
[513]:Problemset/0513-Find%20Bottom%20Left%20Tree%20Value/README.md#513-find-bottom-left-tree-value
19361937
[514]:Problemset/0514-Freedom%20Trail/README.md#514-freedom-trail
19371938
[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
19381940
[518]:Problemset/0518-Coin%20Change%202/README.md#518-coin-change-2
19391941
[519]:Problemset/0519-Random%20Flip%20Matrix/README.md#519-random-flip-matrix
19401942
[520]:Problemset/0520-Detect%20Capital/README.md#520-detect-capital
@@ -3518,6 +3520,7 @@
35183520
[513l]:https://leetcode.com/problems/find-bottom-left-tree-value/
35193521
[514l]:https://leetcode.com/problems/freedom-trail/
35203522
[515l]:https://leetcode.com/problems/find-largest-value-in-each-tree-row/
3523+
[516l]:https://leetcode.com/problems/longest-palindromic-subsequence/
35213524
[518l]:https://leetcode.com/problems/coin-change-2/
35223525
[519l]:https://leetcode.com/problems/random-flip-matrix/
35233526
[520l]:https://leetcode.com/problems/detect-capital/

README_CN.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,7 @@
349349
[513][513l] |[找树左下角的值][513] |![py]
350350
[514][514l] |[自由之路][514] |![rs]
351351
[515][515l] |[在每个树行中找最大值][515] |![py]
352+
[516][516l] |[最长回文子序列][516] |![rs]
352353
[518][518l] |[零钱兑换 II][518] |![rs]
353354
[519][519l] |[随机翻转矩阵][519] |![py]
354355
[520][520l] |[检测大写字母][520] |![rs]
@@ -1935,6 +1936,7 @@
19351936
[513]:Problemset/0513-Find%20Bottom%20Left%20Tree%20Value/README_CN.md#513-找树左下角的值
19361937
[514]:Problemset/0514-Freedom%20Trail/README_CN.md#514-自由之路
19371938
[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-最长回文子序列
19381940
[518]:Problemset/0518-Coin%20Change%202/README_CN.md#518-零钱兑换-ii
19391941
[519]:Problemset/0519-Random%20Flip%20Matrix/README_CN.md#519-随机翻转矩阵
19401942
[520]:Problemset/0520-Detect%20Capital/README_CN.md#520-检测大写字母
@@ -3518,6 +3520,7 @@
35183520
[513l]:https://leetcode.cn/problems/find-bottom-left-tree-value/
35193521
[514l]:https://leetcode.cn/problems/freedom-trail/
35203522
[515l]:https://leetcode.cn/problems/find-largest-value-in-each-tree-row/
3523+
[516l]:https://leetcode.cn/problems/longest-palindromic-subsequence/
35213524
[518l]:https://leetcode.cn/problems/coin-change-2/
35223525
[519l]:https://leetcode.cn/problems/random-flip-matrix/
35233526
[520l]:https://leetcode.cn/problems/detect-capital/

0 commit comments

Comments
 (0)