动态规划——distinct-subsequences t在s中出现的次数
2016-05-21 20:20
423 查看
题目描述:
给定2个字符串s, t,求t在s中出现的次数。要求可以是不连续的,但是t在s中的顺序必须和t以前的一致。
例如:
S ="rabbbit", T ="rabbit"
Return3.
解法:
递推公式化为递归的代码为: 其中存在大量的重复计算.
DP:
如果S[i]==T[j],那么dp[i][j] = dp[i-1][j-1] + dp[i-1][j];
如果S[i]!=T[i],那么dp[i][j] = dp[i-1][j].
给定2个字符串s, t,求t在s中出现的次数。要求可以是不连续的,但是t在s中的顺序必须和t以前的一致。
例如:
S ="rabbbit", T ="rabbit"
Return3.
解法:
递推公式化为递归的代码为: 其中存在大量的重复计算.
public class Solution { public int numDistinct(String s, String t) { if(s == null||t == null||s.length()<t.length()) return 0; return numdistinct(s,t,s.length(),t.length()); } public int numdistinct(String s,String t,int j,int i) { if(i == 0)//只有在s.charAt(j)==t.charAt(1)时,才会递归到这一层,所以要返回1,因为有一个相同的。 return 1; if(j<i)//j<i时,返回0; return 0; //一般情况的递推公式: if(s.charAt(j-1) != t.charAt(i-1)) return numdistinct(s,t,j-1,i); else return numdistinct(s,t,j-1,i)+numdistinct(s,t,j-1,i-1); } }
DP:
如果S[i]==T[j],那么dp[i][j] = dp[i-1][j-1] + dp[i-1][j];
如果S[i]!=T[i],那么dp[i][j] = dp[i-1][j].
public int numDistinct(String s, String t) { if(s == null||t == null||s.length()<t.length()) return 0; //***temp[i][j]存放s有j个字符,t有i个字符时的t在s中出现的次数; int [][]temp=new int[t.length()+1][s.length()+1]; //初始化边界赋值,i == 0时为1,j<i时为0; for(int j=0;j<=s.length();j++) temp[0][j]=1; for(int j=0;j<=t.length();j++) { for(int i=0;i<=t.length();i++) { if(j<i) temp[i][j]=0;//j<i即s的长度小于t的长度时. } } //一般递归公式: for(int j=1;j<=s.length();j++) { for(int i=1;i<=t.length();i++) { if(s.charAt(j-1)!=t.charAt(i-1))//i,j为字符数,求字符下标时小心越界! { temp[i][j]=temp[i][j-1]; }else { temp[i][j]=temp[i-1][j-1]+temp[i][j-1]; } } } return temp[t.length()][s.length()]; }
相关文章推荐
- 微软扫盲贴:Windows 和 GPT 常见问题解答(uefi、GPT、ESP、MSR之类的概念)
- PHP Study- Issue 1 -Redirect Unable to load the module
- 8种删除UICollectionViewCell的动画
- Codeforces Round #316 (Div. 2) D. Tree Requests
- break,continue,与标号
- U3d屏幕自适应
- 02.手把手教你 .Net EasyUI DataGrid(数据表格排序)
- MFC中应用WM_ENDSESSION,WM_QUERYENDSESSION消息截获系统的关机/注销
- POJ-2031-Building a Space Station-(最小生成树 普利姆)
- MVC5 DBContext.Database.SqlQuery获取对象集合到ViewModel集合中(可以利用这个方法给作为前台视图页cshtml页面的@model 源)
- (创建型模式)BUILDER——建造者模式(生成器模式)
- UI基础_UIButton
- android view 的requestLayout和invalidate
- 快速搜索(QuickSearchbox)怎么关联应用(apk)
- UITableableView自定义cell
- 16进制颜色(html颜色值)字符串转为UIColor
- UEditor路径配置
- EasyUI datagrid实现翻页保持checkbox状态
- UI基础_UIView
- UITableView的优化