LintCode-不同的子序列
来源:互联网 发布:淘宝返现的钱在哪里 编辑:程序博客网 时间:2024/05/05 09:08
给出字符串S和字符串T,计算S的不同的子序列中T出现的个数。
子序列字符串是原始字符串通过删除一些(或零个)产生的一个新的字符串,并且对剩下的字符的相对位置没有影响。(比如,“ACE”是“ABCDE”的子序列字符串,而“AEC”不是)。
样例
给出S = "rabbbit", T = "rabbit"
返回 3
分析:一般来说,如果题目里面给出两个字符串,基本是两种思路,一种就是递归判断,一种就是动态规划,这里我们可以用f(i,j)表示S中前i个字符串中,T的前j个字符出现的次数,不管S[i]和T[j]相不相等,首先f(i,j)=f(i-1,j),其次要是S[i]==T[j]的话,f(i,j) = f(i-1,j)+f(i-1,j-1),可以看到,i的状态只与i-1有关,于是可以用滚动数组来进行优化。代码类似01背包。
代码:
class Solution {public: /** * @param S, T: Two string. * @return: Count the number of distinct subsequences */ int numDistinct(string &S, string &T) { // write your code here vector<int> dp(T.length()+1); dp[0] = 1; for(int i=1;i<=S.length();i++) { for(int j=T.length();j>0;j--) dp[j] += T[j-1]==S[i-1]?dp[j-1]:0; } return dp[T.length()]; }};
0 0
- LintCode-不同的子序列
- LintCode -- 不同的子序列
- LintCode 不同的子序列
- 不同的子序列-LintCode
- lintcode--不同的子序列
- lintcode之不同子序列数 + 序列II
- 不同的子序列
- 不同的子序列
- 不同的子序列
- 不同的子序列
- LintCode 带重复元素的子序列
- 题目:不同的子序列
- LintCode-乘积最大子序列
- lintcode-最长连续子序列
- LintCode -- 乘积最大子序列
- LintCode : 最长公共子序列
- lintcode- 乘积最大子序列
- LintCode:乘积最大子序列
- 测试网站加载工具
- ImportError: Error loading object 'scrapy.contrib.memusage.MemoryUsage': No module named mail.smtp
- jcrop+ajaxFileUpload+PHP裁剪图片
- AutoLayout UIScrollView
- SPRING技术内幕:深入解析SPRING架构与设计原理(第2版)-笔记(一)IOC解析
- LintCode-不同的子序列
- python进程和线程
- Android性能优化之关于缓存的构思
- DB2PD工具使用
- Vuforia SDK---- AR开发旋转缩放模型功能
- LINUX中gm的使用
- leetcode #9 Palindrome Number
- linux环境下调试有关涉及到条件编译的c程序的小用法
- 千锋好程序员培训第一天