LeetCode115 Distinct Subsequences
2024-10-08 04:23:52
Given a string S and a string T, count the number of distinct subsequences of T in S. (Hard)
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
.
分析:
看题目感觉就跟LCS很像,考虑用双序列动态规划解决。
1. 状态:
dp[i][j]表示从第一个字符串前i个组成的子串转换为第二个字符串前j个组成的子串共有多少种方案。
2. 递推:
s[i - 1] == t[j - 1], 则dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j];
s[i - 1] != t[j - 1],则dp[i][j] = dp[i - 1][j];
3. 初始化:
dp[i][0] = 1(删除到没有字符只有一种方案)
4. 返回值:
dp[sz1 - 1][sz2 - 1]
代码:
class Solution {
public:
int numDistinct(string s, string t) {
int sz1 = s.size(), sz2 = t.size();
int dp[sz1 + ][sz2 + ];
memset(dp, , sizeof(dp));
for (int i = ; i < sz1; ++i) {
dp[i][] = ;
}
for (int i = ; i <= sz1; ++i) {
for (int j = ; j <= sz2; ++j) {
if (s[i - ] == t[j - ]) {
dp[i][j] = dp[i - ][j - ] + dp[i - ][j];
}
else {
dp[i][j] = dp[i - ][j];
}
}
}
return dp[sz1][sz2];
}
};
最新文章
- 一起来做chrome扩展《可配置的代理》
- git和svn
- android launchmode(四种启动模式)应用场景及实例
- 很好的一篇讲LTP在编解码中的作用的文章
- .net 中 ref out params的区别
- PHP中的XML解析的5种方法
- Java运行环境的配置(JDK和JRE)
- 第12届北师大校赛热身赛第二场 A.不和谐的长难句1
- tomcat7 https 成功测试
- HTML5音乐可视化
- 透过浏览器看HTTP缓存(转)
- tyflow birth节点
- 一个表里有多个字段需要同时使用字典表进行关联显示,如何写sql查询语句
- Selenium自动化测试之学会元素定位
- Windows10下安装VMware虚拟机并搭建CentOS系统环境
- 每日一小时linux(1)--sysRq
- Android高效内存2:让图片占用尽可能少的内存
- ImageMagick安装
- java中new一个对象和对象=null有什么区别
- const关键字对C++成员函数的修饰