文章目录
- ● 392.判断子序列
- 思路
- 代码:
- ● 115.不同的子序列
- 思路:
- 代码:
● 392.判断子序列
思路
递推顺序:从上到下 从左到右
代码:
class Solution {
public boolean isSubsequence(String s, String t) {
int[][]dp=new int[s.length()+1][t.length()+1];
for(int i=1;i<=s.length();i++){
for(int j=1;j<=t.length();j++){
if(s.charAt(i-1)==t.charAt(j-1)){
dp[i][j]=dp[i-1][j-1]+1;
}else{
dp[i][j]=dp[i][j-1];
}
}
}
// for(int i=1;i<=s.length();i++){
// for(int j=1;j<=t.length();j++){
// System.out.print(dp[i][j]);
// }
// System.out.println();
// }
return dp[s.length()][t.length()]==s.length();
}
}
● 115.不同的子序列
思路:
dp[i][j]:以i-1为结尾的s子序列中出现以j-1为结尾的t的个数为dp[i][j]。
代码:
class Solution {
public int numDistinct(String s, String t) {
int[][] dp = new int[s.length() + 1][t.length() + 1];
// dp[i][j]:以i-1为结尾的s子序列中出现以j-1为结尾的t的个数为dp[i][j]。
for (int i = 0; i < s.length() + 1; i++) {
dp[i][0] = 1;
}
for (int i = 1; i < s.length() + 1; i++) {
for (int j = 1; j < t.length() + 1; j++) {
if(s.charAt(i-1)==t.charAt(j-1)){
dp[i][j]=dp[i-1][j-1]+dp[i-1][j];
}else{
dp[i][j]=dp[i-1][j];
}
}
}
return dp[s.length()][t.length()];
}
}