Distinct Subsequences

来源:互联网 发布:软件开发工具研究 编辑:程序博客网 时间:2024/05/18 16:15

Distinct Subsequences
Oct 19 '123689 / 10619

Given a string S and a string T, count the number of distinct subsequences ofT 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中有几个?

 

class Solution {public:    int numDistinct(string S, string T) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        int lenS = S.size();        if(lenS == 0)            return 0;        int lenT = T.size();        vector<int> ref(lenS, 1);        vector<int> cur(lenS, 0);        for(int i = 0; i < lenT; i ++)        {            for(int j = 0; j < lenS; j++)                cur[j] = 0;            for(int j = i; j < lenS; j ++)            {                if(T[i] == S[j])                {                    if(j == 0)                        cur[j] = 1;                    else                        cur[j] = ref[j-1] + cur[j-1];                }                else                {                    if(j == 0)                        cur[j] = 0;                    else                        cur[j] = cur[j-1];                }            }            for(int j = 0; j < lenS; j++)            {                ref[j] = cur[j];            }        }        return ref[lenS-1];    }};


原创粉丝点击