Distinct SubsequencesOct 19 '123689 / 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];
}
};
本文介绍了一种计算两个字符串间不同子序列数量的方法。通过一个具体的例子,即在字符串S中寻找字符串T的所有可能子序列出现次数,展示了一种有效算法的实现细节。该算法使用动态规划思想,能够高效地解决问题。
3196

被折叠的 条评论
为什么被折叠?



