distinct sequence Google

来源:互联网 发布:贝叶斯网络 编辑:程序博客网 时间:2024/05/16 08:35

leetcode ,暴力解法dfs, 双指针,不行

    public int numDistinct(String s, String t) {        return numDistinctHelper(s,t,0,0);    }    public int numDistinctHelper(String s, String t, int si, int ti){        if(ti == t.length()) {            return 1;        }        if(si >= s.length()){            return 0;        }        int count = 0;        for(int i = si; i < s.length(); i++){            if(s.charAt(i) == t.charAt(ti)){                count += numDistinctHelper(s,  t, i+1, ti+1);            }        }        return count;    }

A Clever way to solve it: (Dynamic Programming)
solution: Let W(i, j) stand for the number of subsequences of S(0, i) equals to T(0, j). If S.charAt(i) == T.charAt(j), W(i, j) = W(i-1, j-1) + W(i-1,j); Otherwise, W(i, j) = W(i-1,j).

    public int numDistinct(String S, String T) {            int[][] table = new int[S.length() + 1][T.length() + 1];            for (int i = 0; i < S.length(); i++)                table[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)) {                        table[i][j] += table[i - 1][j] + table[i - 1][j - 1];                    } else {                        table[i][j] += table[i - 1][j];                    }                }            }            return table[S.length()][T.length()];    }
0 0
原创粉丝点击