不同的子序列
来源:互联网 发布:如何新建数据库表 编辑:程序博客网 时间:2024/05/16 16:14
给出字符串S和字符串T,计算S的不同的子序列中T出现的个数。
子序列字符串是原始字符串通过删除一些(或零个)产生的一个新的字符串,并且对剩下的字符的相对位置没有影响。(比如,“ACE”是“ABCDE”的子序列字符串,而“AEC”不是)。
样例
给出S = "rabbbit", T = "rabbit"
返回 3
点题:1,边界条件;2,当t为空的时候为1
class Solution {public: int numDistinct(string s, string t) { if (s.size() == 0 || s.size() < t.size()) { return 0; } if (t.size() == 0) { return 1; } vector<vector<int>> dp(s.size() + 1, vector<int>(t.size() + 1, 0)); // init for (int i = 0; i <= s.size(); i++) { dp[i][0] = 1; } for (int i = 1; i <= s.size(); i++) { for (int j = 1; j <= t.size(); j++) { dp[i][j] = dp[i - 1][j]; if (s[i - 1] == t[j - 1]) { dp[i][j] += dp[i - 1][j - 1]; } } } return dp[s.size()][t.size()]; }};
阅读全文