115. 不同的子序列
Posted 张乐乐章
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了115. 不同的子序列相关的知识,希望对你有一定的参考价值。
给定一个字符串 s
和一个字符串 t
,计算在 s
的子序列中 t
出现的个数。
字符串的一个 子序列 是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,"ACE"
是 "ABCDE"
的一个子序列,而 "AEC"
不是)
题目数据保证答案符合 32 位带符号整数范围。
示例 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
提示:
0 <= s.length, t.length <= 1000
s
和t
由英文字母组成
1 class Solution { 2 public: 3 int numDistinct(string t, string s) { 4 uint64_t n = s.size(); 5 uint64_t m = t.size(); 6 // s[:i] 在t[:j] 出现的个数 7 uint64_t dp[n+1][m+1]; 8 9 // s[:i] 在空字符串中出现的次数是0 10 for(uint64_t i = 0;i < n+1; i++) { 11 dp[i][0] = 0; 12 } 13 // 空字符串 在 t子序列中出现的次数1 14 for(uint64_t j = 0; j < m+1;j++) { 15 dp[0][j] = 1; 16 } 17 dp[0][0] = 1; 18 // 空字符串 在 空字符串子序列中出现的次数1 19 20 for(uint64_t i =1;i<n+1;i++) { 21 for(uint64_t j = 1;j < m+1;j++) { 22 if(s[i-1]==t[j-1]) { 23 // 删除 t[i] s[j] 都可以删除 24 25 dp[i][j] = dp[i-1][j-1] + dp[i][j-1]; 26 } else { 27 // 删除 t[j] 28 dp[i][j] = dp[i][j-1]; 29 } 30 } 31 } 32 33 34 return dp[n][m]; 35 } 36 };
以上是关于115. 不同的子序列的主要内容,如果未能解决你的问题,请参考以下文章