leetcode 115 Distinct Subsequences ----- java

Given a string S and a string T, count the number of distinct subsequences of T in S.

A subsequence of a string is a new string which is formed from the original string by deleting some (can be none) of the characters without disturbing the relative positions of the remaining characters. (ie, "ACE" is a subsequence of "ABCDE" while "AEC" is not).

Here is an example:
S = "rabbbit", T = "rabbit"

Return 3.

这道题是求字符串T是字符串S的字串的所有可能性的数目(不存在就是0)。

刚开始算的的时候比较暴力,所以超时了。

public class Solution {
    char[] word1;
    char[] word2;
    int result = 0;
    public int numDistinct(String s, String t) {
        int len1 = s.length(),len2 = t.length();
        if( len1 < len2 )
            return 0;
        word1 = s.toCharArray();
        word2 = t.toCharArray();
        for( int i = 0;i<=len1-len2;i++){
            if( word1[i] == word2[0])
                helper(i+1,1);
        }
        return result;

    }
    public void helper(int start1,int start2){

        if( start2 == word2.length ){
            result++;
            return ;
        }
        for( int i = start1;i< word1.length ;i++){
            if( word1[i] == word2[start2] )
                helper(i+1,start2+1);
        }

    }
}

所以用DP算法。

DP,化归为二维地图的走法问题。

r  a  b  b   i   t

1  0  0  0  0  0  0

r  1

a  1

b  1

b  1

b  1

i   1

t  1

如果当前字符相同,dp[i][j]结果等于用(dp[i-1][j-1])和(dp[i-1][j])求和

如果当前字符不同,dp[i][j] = dp[i-1][j]

public class Solution {

    public int numDistinct(String s, String t) {
        int len1 = s.length(),len2 = t.length();
        if( len1 < len2 )
            return 0;
        char[] word1 = s.toCharArray();
        char[] word2 = t.toCharArray();
        int[][] dp = new int[len1+1][len2+1];

        for( int i = 0;i<=len1;i++){
            for( int j = 0;j<=i && j<=len2;j++){
                if( i == 0 && j != 0)
                    dp[i][j] = 0;
                else if( j == 0)
                    dp[i][j] = 1;
                else if( word1[i-1] == word2[j-1] )
                    dp[i][j] = dp[i-1][j-1] + dp[i-1][j];
                else
                    dp[i][j] = dp[i-1][j];

            }
        }

        return dp[len1][len2];
        }

}
时间: 2024-10-13 21:24:06

leetcode 115 Distinct Subsequences ----- java的相关文章

Java for LeetCode 115 Distinct Subsequences【HARD】

Given a string S and a string T, count the number of distinct subsequences of T in S. A subsequence of a string is a new string which is formed from the original string by deleting some (can be none) of the characters without disturbing the relative

leetcode 115. Distinct Subsequences

Given a string S and a string T, count the number of distinct subsequences of T in S. A subsequence of a string is a new string which is formed from the original string by deleting some (can be none) of the characters without disturbing the relative

Leetcode 115 Distinct Subsequences 解题报告

Distinct Subsequences Total Accepted: 38466 Total Submissions: 143567My Submissions Question Solution Given a string S and a string T, count the number of distinct subsequences of T in S. A subsequence of a string is a new string which is formed from

[动态规划] leetcode 115 Distinct Subsequences

problem:https://leetcode.com/problems/distinct-subsequences/ 字符匹配类型题目. class Solution { public: vector<vector<int>> dp; int numDistinct(string& s, string& t, int i, int j) { if(j == t.size()) return 1; if(i == s.size()) return 0; if(dp

【leetcode】Distinct Subsequences

问题:给定两个字符串S,T,对于S,可以删除其中的任意多个(包括0)字符,使其得到T.问有多少种删法可以得到T. 举例分析: S:ababa T: aba dp[i][j] : 表示 S 从0 ~ i - 1,T从0~j - 1,所得到的方法数.i,j 表示长度. 初始条件:dp[i][0] = 1,T为空串,而空串总是任意串的字串.即,将S串的所有字符都删掉,就得到T. 状态转移方程: dp[ i ] [ j ] = dp[ i - 1] [ j - 1] + dp[ i - 1] [ j ]

115 Distinct Subsequences

115 Distinct Subsequences 这道题是dp, 我定义的dp[i][j] 为用t[:i] 和s[:j] 的disitinct subsequence排列数 class Solution: # @param {string} s # @param {string} t # @return {integer} def numDistinct(self, s, t): m, n = len(t), len(s) if m == 0 or n == 0: return 0 dp,cu

115. Distinct Subsequences(js)

115. Distinct Subsequences Given a string S and a string T, count the number of distinct subsequences of S which equals T. A subsequence of a string is a new string which is formed from the original string by deleting some (can be none) of the charac

leetcode 之 Distinct Subsequences

Distinct Subsequences Given a string S and a string T, count the number of distinct subsequences of T in S. A subsequence of a string is a new string which is formed from the original string by deleting some (can be none) of the characters without di

LeetCode 115:Distinct Sequence

Given a string S and a string T, count the number of distinct subsequences of T in S. A subsequence of a string is a new string which is formed from the original string by deleting some (can be none) of the characters without disturbing the relative