Leetcode -- Distinct Subsequences
2015-10-30 14:44
411 查看
Given a string S and a string T, count the number of distinct subsequences of T in S.
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,
a subsequence of
not).
Here is an example:
S =
Return
分析:
使用二维动态规划,并利用滚动数组减少空间开销。
设f[i,j] 为s[0,i]内找到t[0,j]的次数,则可以分为两种情况:
1. 不考虑s[i],则f[i,j]=f[i-1,j];
2. 考虑s[i],若s[i]==t[j],则还要加上f[i-1,j-1];
所以递推公式为:
f[i,j]=f[i-1,j]+{ s[i]==t[j]?f[i-1,j-1]:0}
根据上式,每次计算的时候实际只需要用到前一行的结果,因此没有必要完整的保存整个f[i,j]。一种方法是将f[i,j]存成两行,每次通过对2取模来决定修改哪一行;另一种方法即如以下代码所示,仅适用一行,但是从后向前更改,每次计算f[j]时保证f[j-1]不变。
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.
分析:
使用二维动态规划,并利用滚动数组减少空间开销。
设f[i,j] 为s[0,i]内找到t[0,j]的次数,则可以分为两种情况:
1. 不考虑s[i],则f[i,j]=f[i-1,j];
2. 考虑s[i],若s[i]==t[j],则还要加上f[i-1,j-1];
所以递推公式为:
f[i,j]=f[i-1,j]+{ s[i]==t[j]?f[i-1,j-1]:0}
根据上式,每次计算的时候实际只需要用到前一行的结果,因此没有必要完整的保存整个f[i,j]。一种方法是将f[i,j]存成两行,每次通过对2取模来决定修改哪一行;另一种方法即如以下代码所示,仅适用一行,但是从后向前更改,每次计算f[j]时保证f[j-1]不变。
class Solution { public: int numDistinct(string s, string t) { int n=t.size(); vector<int> f(n+1,0); f[0]=1; for(int i=0;i<s.size();++i) for(int j=t.size()-1;j>=0;--j) f[j+1]+=s[i]==t[j]?f[j]:0; return f ; } };
相关文章推荐
- EasyUI datagrildview导出excel报表
- 杭电ACM-HDU1005-Number Sequence
- Arduino 4X3键盘 AD模拟分量实现
- UIControl 使用
- GUI显示系统之 SurfaceFlinger
- Ligthoj 1154--Penguins【最大流 && 拆点】
- PHP $_SERVER["SCRIPT_NAME"]、$_SERVER["PHP_SELF"]、$_SERVER["QUERY_STRING"]、$_SERVER["REQUEST_URI"]
- String、StringBuilder与StringBuffer
- 自定义UIAlertView第三方类库
- Integer.valueOf(String) 方法之惑
- Codeforces Round #327 (Div. 2)D. Chip 'n Dale Rescue Rangers
- Codeforces Round #312 (Div. 2) D. Guess Your Way Out! II
- uuid在线生成
- LeetCode 63: Unique Paths II
- Cordova Plugin Issue for IOS
- ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局
- 研究响应式web设计之CSS3 Media Queries
- EasyUI-获取Tree得到选取实心圆点的id核心代码
- EasyUI-初始化异步树直接全部展开
- EasyUI系列之布局Layout