算法修炼Day 55| 392.判断子序列 ● 115.不同的子序列

58 阅读1分钟
题目:392. 判断子序列 - 力扣(LeetCode)
代码实现:
class Solution {
    public boolean isSubsequence(String s, String t) {
        int i, j;
        for (i = 0, j = 0; i < s.length() && j < t.length(); j++) {
            if (s.charAt(i) == t.charAt(j)) {
                i++;
            }
        }
        return i == s.length();
    }
}
题目:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
代码实现:
class Solution {
    public int numDistinct(String s, String t) {
        // 定义dp数组:dp[i][j] 表示以s[i - 1] 为结尾的字符串中 以t[j - 1] 为结尾的字符串出现的个数
        int[][] dp = new int[s.length() + 1][t.length() + 1];
        // 初始化
        for (int i = 0; i <= s.length(); i++) dp[i][0] = 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] + dp[i - 1][j];
                } else {
                    dp[i][j] = dp[i - 1][j];
                }
            }
        } 
        return dp[s.length()][t.length()];
    }
}