美文网首页
Java日记2018-07-28

Java日记2018-07-28

作者: hayes0420 | 来源:发表于2018-07-28 07:38 被阅读0次

Distinct Subsequences

题目实际意思就是字符串s,删除自己的字符,有多少种方法能得到子字符串t
距离S = "rabbbit", T = "rabbit",那么s跟t有一个字符b不一致,那么s有3个字符b,可以在这三个位置删除,每个位置就是一种方法,于是结果是3;

例子:S:rabb T:rab s的第i个字符是b,t的第j个字符也是b,于是s[i-1]就是rab,t[j-1]是ra,t[j]是rab,ra是子字符串,rab也是子字符串
那么当S[ i ] == T[ j]时,动态规划公式用实际情况表达出来就是:

dp[i][j] = dp[i-1][j-1] + dp[i-1][j]

T: rab rab ra

S; rabb rab rab

public static int subStr(String s, String t) {
        if (s == null)
            return 1;
        if (t == null)
            return 1;
        int m = s.length();
        int n = t.length();
        int[][] dp = new int[m + 1][n + 1];
        for (int j = 0; j <= m; j++) dp[j][0] = 1;
        
        for (int i = 1; i <= m; i++) {
            for (int j = 1; j <= n; j++) {
                if (s.charAt(i-1) == t.charAt(j-1)) {
                    dp[i][j] = dp[i-1][j] + dp[i-1][j-1];
                } else {
                    dp[i][j] = dp[i-1][j];
                }
            }
        }
        System.out.println(dp[m][n]);
        return dp[m][n];
    }

相关文章

网友评论

      本文标题:Java日记2018-07-28

      本文链接:https://www.haomeiwen.com/subject/vrinmftx.html