荣成市信用建设官方网站,wordpress防止,全球建筑设计公司前十名,2016手机网站制作规范题目
给定一个字符串 s 和一个字符串 t #xff0c;计算在 s 的子序列中 t 出现的个数。
字符串的一个 子序列 是指#xff0c;通过删除一些#xff08;也可以不删除#xff09;字符且不干扰剩余字符相对位置所组成的新字符串。#xff08;例如#xff0c;“ACE” 是 “…题目
给定一个字符串 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 由英文字母组成
参考答案
class Solution {
public:int numDistinct(string s, string t) {int m s.length(), n t.length();if (m n) {return 0;}vectorvectorlong dp(m 1, vectorlong(n 1));for (int i 0; i m; i) {dp[i][n] 1;}for (int i m - 1; i 0; i--) {char sChar s.at(i);for (int j n - 1; j 0; j--) {char tChar t.at(j);if (sChar tChar) {dp[i][j] dp[i 1][j 1] dp[i 1][j];} else {dp[i][j] dp[i 1][j];}}}return dp[0][0];}
};