代码随想录算法训练营day 55 |392.判断子序列、115.不同的子序列

392.判断子序列

代码随想录

思路:

dp[i][j] 表示以下标i-1为结尾的字符串s,和以下标j-1为结尾的字符串t,相同子序列的长度为dp[i][j]

代码:

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++){
            char c1 = s.charAt(i-1);
            for(int j = 1; j <= t.length(); j++){
                char c2 = t.charAt(j-1);
                if(c1 == c2){
                    dp[i][j] = dp[i-1][j-1]+1;
                }else{
                    dp[i][j] = dp[i][j-1];
                }
            }
        }
        if(dp[s.length()][t.length()] == s.length()) return true;
        else return false;
    }
}

需要注意的点:

115.不同的子序列

代码随想录

思路:

代码:

class Solution {
    public int numDistinct(String s, String t) {
        int[][] dp = new int[s.length()+1][t.length()+1];
        for (int i = 0; i < s.length() + 1; i++) {
            dp[i][0] = 1;
        }
        for(int i = 1; i <= s.length(); i++){
            char c1 = s.charAt(i-1);
            for(int j = 1; j <= t.length(); j++){
                char c2 = t.charAt(j-1);
                if(c1 == c2){
                    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()];
    }
}

需要注意的点:

初始化

你可能感兴趣的:(算法,leetcode,数据结构)