代码随想录训练营第55天|392.判断子序列,115.不同的子序列

代码随想录训练营第55天|392.判断子序列,115.不同的子序列

  • 392.判断子序列
    • 文章
    • 思路
    • 代码
  • 115.不同的子序列
    • 文章
    • 思路
    • 代码
  • 总结

392.判断子序列

文章

代码随想录|0392.判断子序列

思路

d p [ i ] [ j ] = s [ i ] = = t [ j ] & & d p [ i − 1 ] [ j − 1 ] dp[i][j]=s[i]==t[j]\&\&dp[i-1][j-1] dp[i][j]=s[i]==t[j]&&dp[i1][j1]

代码

class Solution {
    public boolean isSubsequence(String s, String t) {
        int i, j, m, n;
        m = s.length();
        n = t.length();
        if (m == 0) {
            return true;
        }
        if (n < m) {
            return false;
        }
        boolean[][] dp = new boolean[m][n];
        for (i = 0; i < m; ++i) {
            for (j = i; j < n; ++j) {
                if (i == 0 && j == 0) {
                    dp[i][j] = s.charAt(i) == t.charAt(i);
                } else if (i == 0) {
                    dp[i][j] = s.charAt(i) == t.charAt(j) || dp[i][j - 1];
                } else if (j == 0) {
                    dp[i][j] = false;
                } else {
                    dp[i][j] = dp[i - 1][j - 1] && s.charAt(i) == t.charAt(j) || dp[i][j - 1];
                }
            } 
        }
        return dp[m - 1][n - 1];
    }
}

115.不同的子序列

文章

代码随想录|0115.不同的子序列

思路

d p [ i ] [ j ] = d p [ i − 1 ] [ j ] + d p [ i − 1 ] [ j − 1 ] ∗ s [ i ] = = t [ j ] dp[i][j]=dp[i-1][j]+dp[i-1][j-1]*s[i]==t[j] dp[i][j]=dp[i1][j]+dp[i1][j1]s[i]==t[j]

代码

class Solution {
    public int numDistinct(String s, String t) {
        int i, j, m, n;
        m = s.length();
        n = t.length();
        long mod = 1000000007;
        long[][] dp = new long[m][n];
        for (i = 0; i < m; ++i) {
            for (j = 0; j <= i && j < n; ++j) {
                if (i == 0) {
                    dp[i][j] = s.charAt(i) == t.charAt(j) ? 1L : 0L;
                } else if (j == 0) {
                    dp[i][j] = dp[i - 1][j] % mod +  (s.charAt(i) == t.charAt(j) ? 1L : 0L);
                } else {
                    dp[i][j] = dp[i - 1][j] % mod + dp[i - 1][j - 1] % mod * (s.charAt(i) == t.charAt(j) ? 1L : 0L);
                }
                // System.out.print(" " + dp[i][j]);
            }
            // System.out.println();
        }
        return (int)dp[m - 1][n - 1];
    }
}

总结

凭直觉做题了开始

你可能感兴趣的:(java,动态规划)