博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode Distinct Subsequences
阅读量:4930 次
发布时间:2019-06-11

本文共 2221 字,大约阅读时间需要 7 分钟。

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.

#include 
#include
#include
#include
using namespace std;class Solution {private: // only used by dfs int *memo; int cols;public: // 1. dfs int numDistinct(string S, string T) { int ret = 0; cols = T.length(); int msize = S.length() * cols; memo = new int[msize]; memset(memo, -1, msize * sizeof(int)); ret = dfs(S, 0, T, 0); delete[] memo; return ret; } int dfs(string& S, int pa, string& T, int pb) { if (pb >= T.size()) { return 1; } if (pa >= S.size()) return 0; if (memo[pa * cols + pb] != -1) return memo[pa * cols + pb]; int r = 0; if (S[pa] == T[pb]) { r += dfs(S, pa + 1, T, pb + 1); } r += dfs(S, pa + 1, T, pb); memo[pa * cols + pb] = r; return r; } // 2. dynamic programming int _numDistinct(string S, string T) { int ret = 0; int rows = S.length() + 1; int cols = T.length() + 1; int* dp = new int[rows * cols]; for (int i=0; i

跟往常一样凡是能用dfs+memo解决的,都可以改写为动态规划的形式,实质上即一个问题有最优子问题组成的解。

隔了一年想不起来了,dp看来还是无法掌握,IQ有限:

class Solution {public:    int numDistinct(string s, string t) {        int slen = s.size();        int tlen = t.size();                vector
> dp(slen + 1, vector
(tlen + 1, 0)); for (int i=0; i <= slen; i++) { dp[i][0] = 1; } for (int i=1; i<=slen; i++) { for (int j=1; j<=tlen; j++) { dp[i][j] = dp[i-1][j] + (s[i-1] == t[j-1] ? dp[i-1][j-1] : 0); } } return dp[slen][tlen]; }};

 

转载于:https://www.cnblogs.com/lailailai/p/3612660.html

你可能感兴趣的文章
vue报错Error in render: "TypeError: Cannot read property '0' of undefined"
查看>>
silverlight 隐藏ChildWindow 右上角的关闭按钮
查看>>
oracle获取子串
查看>>
List排序
查看>>
Javascript闭包(Closure)
查看>>
字符串操作
查看>>
redis
查看>>
likely() 和 unlikely()
查看>>
4. Median of Two Sorted Arrays
查看>>
03一些View总结
查看>>
每月一次,免费领取小米云服务会员
查看>>
MapReduce--平均分,最高,低分以及及格率的计算
查看>>
mac下管理论文的工具
查看>>
[c++面试准备]--vector对象是如何增长的
查看>>
【十大经典数据挖掘算法】k
查看>>
POJ3122Pie(二分)
查看>>
114. Flatten Binary Tree to Linked List
查看>>
WF+WCF+WPF第二天--模拟超市收银
查看>>
爬取贴吧好看的桌面图片 -《狗嗨默示录》-
查看>>
Bellman-Ford
查看>>