mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-07 07:35:35 +08:00
动态规划 判断子序列 java 动态规划状态压缩
This commit is contained in:
@ -173,6 +173,63 @@ class Solution {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
> 修改遍历顺序后,可以利用滚动数组,对dp数组进行压缩
|
||||||
|
```java
|
||||||
|
class Solution {
|
||||||
|
public boolean isSubsequence(String s, String t) {
|
||||||
|
// 修改遍历顺序,外圈遍历t,内圈遍历s。使得dp的推算只依赖正上方和左上方,方便压缩。
|
||||||
|
int[][] dp = new int[t.length() + 1][s.length() + 1];
|
||||||
|
for (int i = 1; i < dp.length; i++) { // 遍历t字符串
|
||||||
|
for (int j = 1; j < dp[i].length; j++) { // 遍历s字符串
|
||||||
|
if (t.charAt(i - 1) == s.charAt(j - 1)) {
|
||||||
|
dp[i][j] = dp[i - 1][j - 1] + 1;
|
||||||
|
} else {
|
||||||
|
dp[i][j] = dp[i - 1][j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
System.out.println(Arrays.toString(dp[i]));
|
||||||
|
}
|
||||||
|
return dp[t.length()][s.length()] == s.length();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
> 状态压缩
|
||||||
|
```java
|
||||||
|
class Solution {
|
||||||
|
public boolean isSubsequence(String s, String t) {
|
||||||
|
int[] dp = new int[s.length() + 1];
|
||||||
|
for (int i = 0; i < t.length(); i ++) {
|
||||||
|
// 需要使用上一轮的dp[j - 1],所以使用倒序遍历
|
||||||
|
for (int j = dp.length - 1; j > 0; j --) {
|
||||||
|
// i遍历的是t字符串,j遍历的是dp数组,dp数组的长度比s的大1,因此需要减1。
|
||||||
|
if (t.charAt(i) == s.charAt(j - 1)) {
|
||||||
|
dp[j] = dp[j - 1] + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dp[s.length()] == s.length();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
> 将dp定义为boolean类型,dp[i]直接表示s.substring(0, i)是否为t的子序列
|
||||||
|
|
||||||
|
```java
|
||||||
|
class Solution {
|
||||||
|
public boolean isSubsequence(String s, String t) {
|
||||||
|
boolean[] dp = new boolean[s.length() + 1];
|
||||||
|
// 表示 “” 是t的子序列
|
||||||
|
dp[0] = true;
|
||||||
|
for (int i = 0; i < t.length(); i ++) {
|
||||||
|
for (int j = dp.length - 1; j > 0; j --) {
|
||||||
|
if (t.charAt(i) == s.charAt(j - 1)) {
|
||||||
|
dp[j] = dp[j - 1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dp[dp.length - 1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
### Python:
|
### Python:
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user