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

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

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.

方法一:用回溯法实现,时间复杂度很高,空间复杂度低,对于小数据可以通过,对大数据会出现Time Limit Exceeded

1 int num=0; 2 void countnum(string S, string T) { 3     if(T.size()==0) 4     { 5         num++; 6         return; 7      } 8             9      for(int i=0; i

 

 

方法二:用动态规划(DP)实现,需要的空间复杂度为O(N*M),对于大数据也可以很快处理。

1 class Solution { 2 public: 3     int numDistinct(string S, string T) { 4         vector
> num(S.size()+1,vector
(T.size()+1,0)); //num[i][j]表示T中的前j个字符构成的子字符串在S中的前i个字符中出现的次数,num[i][j]满足: 5 S = " "+ S; //(1)若S[i]=T[j],则num[i][j] = num[i-1][j]+num[i-1][j-1]; 6 T = " "+ T; //(2)若S[i]!=T[j],则num[i][j] = num[i-1][j]; 7 num[0][0]=1; //(3)若j>i,则num[i][j]=0。 8 for(int i=1; i
i)12 {13 num[i][j]=0;14 break;15 }16 if(S[i]==T[j])17 num[i][j] = num[i-1][j] + num[i-1][j-1];18 else19 num[i][j] = num[i-1][j];20 }21 return num[S.size()-1][T.size()-1];22 23 }24 };

 

转载于:https://www.cnblogs.com/Marrybe/p/3788507.html

你可能感兴趣的文章
用OGRE1.74搭建游戏框架(三)--加入人物控制和场景
查看>>
转化课-计算机基础及上网过程
查看>>
android dialog使用自定义布局 设置窗体大小位置
查看>>
ionic2+ 基础
查看>>
互联网模式下我们更加应该“专注”
查看>>
myeclipse集成jdk、tomcat8、maven、svn
查看>>
查询消除重复行
查看>>
Win 10 文件浏览器无法打开
查看>>
HDU 1212 Big Number(C++ 大数取模)(java 大数类运用)
查看>>
-bash: xx: command not found 在有yum源情况下处理
查看>>
[leetcode]Minimum Path Sum
查看>>
内存管理 浅析 内存管理/内存优化技巧
查看>>
hiho1079 线段树区间改动离散化
查看>>
【BZOJ 5222】[Lydsy2017省队十连测]怪题
查看>>
第二次作业
查看>>
【input】 失去焦点时 显示默认值 focus blur ★★★★★
查看>>
Java跟Javac,package与import
查看>>
day-12 python实现简单线性回归和多元线性回归算法
查看>>
Json格式的字符串转换为正常显示的日期格式
查看>>
[转]使用 Razor 进行递归操作
查看>>