Distinct Subsequences Oct 19 '12 3689 / 10619
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中有几个?
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];
}
};