目录
题目描述:
给定一个字符串 S 和一个字符串 T,计算在 S 的子序列中 T 出现的个数。
一个字符串的一个子序列是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,"ACE"
是 "ABCDE"
的一个子序列,而 "AEC"
不是)
示例 1:
输入: S = "rabbbit", T = "rabbit"输出: 3解释: 如下图所示, 有 3 种可以从 S 中得到 "rabbit" 的方案。 (上箭头符号 ^ 表示选取的字母)rabbbit^^^^ ^^rabbbit^^ ^^^^rabbbit^^^ ^^^
示例 2:
输入: S = "babgbag", T = "bag"输出: 5解释: 如下图所示, 有 5 种可以从 S 中得到 "bag" 的方案。 (上箭头符号 ^ 表示选取的字母)babgbag^^ ^babgbag^^ ^babgbag^ ^^babgbag ^ ^^babgbag ^^^
解法:
class Solution {public: int numDistinct(string s, string t) { int sz = t.size(); vectorcount(sz+1, 0); // rabbbit // rabbit count[0] = 1; for(char ch : s){ for(int i = sz-1; i >= 0; i--){ if(ch == t[i]){ count[i+1] += count[i]; } } } return count[sz]; }};