LeetCode - Distinct Subsequences 题解
来源:互联网 发布:js能定义二维数组吗 编辑:程序博客网 时间:2024/05/24 00:52
题目:
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, "ACE"
is a subsequence of "ABCDE"
while "AEC"
is not).
Here is an example:
S = "rabbbit"
, T = "rabbit"
Return 3
.
解法一:搜索,超时
class Solution {public: int C(int n, int m){ int ans = 1; for(int i = n+1;i <= m; i++) ans = ans * i; for(int i = 1; i <= m-n; i++) ans /= i; return ans; } int numDistinct(string S, string T) { if(T == "") return 1; int i = 0; while(i < S.length() && S[i] != T[0]) i++; if(i == S.length()) return 0; int ns = 0, nt = 0; while(i + ns < S.length() && S[i + ns] == S[i]) ns++; while(nt < T.length() && T[0] == T[nt]) nt++; int minN = min(ns, nt); int ans = 0; for(int j = 0; j <= minN; j++){ ans += C(j, ns) * numDistinct(S.substr(i + ns, S.length()), T.substr(j, T.length())); } return ans; }};
令f[i,j] 表示s的0..i里T0..j的distinct subsequence的个数,则
f[i,j] = f[i-1,j] + f[i-1,j-1] * I {S[i] == T[j]}, I为指示函数
class Solution {public: int numDistinct(string S, string T) { vector<int> f(T.length(), 0), f0(T.length(), 0); if(S[0] == T[0]) f0[0] = 1; for(int i = 1; i < S.length(); i++){ f[0] = f0[0]; if(S[i] == T[0]) f[0] += 1; for(int j = 1; j < T.length(); j++){ f[j] = f0[j]; if(S[i] == T[j]) f[j] += f0[j-1]; } f0 = f; } return f0[T.length() - 1]; }};
0 0
- LeetCode题解:Distinct Subsequences
- LeetCode - Distinct Subsequences 题解
- 【leetcode题解】4 - Distinct Subsequences
- LeetCode 题解(56): Distinct Subsequences
- DISTINCT SUBSEQUENCES 题解
- LeetCode Distinct Subsequences
- [LeetCode]Distinct Subsequences
- [Leetcode] Distinct Subsequences *
- [leetcode] Distinct Subsequences
- [LeetCode] Distinct Subsequences
- [Leetcode] Distinct Subsequences
- leetcode 111: Distinct Subsequences
- LeetCode Distinct Subsequences
- [leetcode] Distinct Subsequences
- LeetCode - Distinct Subsequences
- Leetcode:Distinct Subsequences
- [LeetCode]Distinct Subsequences
- [LeetCode] Distinct Subsequences
- Twin Towers
- 《巨人不死密码》读书笔记
- 越研究这个领域,越觉得一个人伟大,补上一篇迟来的悼文
- XE5安卓手机要求
- Linux常用命令(十) - nl
- LeetCode - Distinct Subsequences 题解
- POJ2184 Cow Exhibition 【01背包】
- 【新博客】重新开通博客的缘由
- gem5中添加调试信息DPRINTF
- Delphi XE6 for Android 我的第一个安卓程序,环境搭建
- Maven +Tomcat+m2eclipse的热部署(hot deploy)
- Git学习笔记(三)
- cobol学习之三文件的输入和输出
- MTK Android Driver:EINT