动态规划——distinct-subsequences
来源:互联网 发布:破壁机有用吗 知乎 编辑:程序博客网 时间:2024/06/04 18:35
题目描述:
给定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()]; }
0 0
- 动态规划——distinct-subsequences
- 13.11—动态规划—Distinct Subsequences
- LeetCode Distinct Subsequences(动态规划)
- 10069 - Distinct Subsequences(高精度+动态规划)
- 115.leetcode Distinct Subsequences(hard)[动态规划]
- LeetCode 115. Distinct Subsequences| 动态规划
- 115. Distinct Subsequences--动态规划的方法
- LeetCode(115) Distinct Subsequences(动态规划)
- LeetCode115—Distinct Subsequences
- Leetcode Distinct Subsequences 动态规划法活用总结
- Leetcode Distinct Subsequences 动态规划法活用总结
- LeetCode —— Distinct Subsequences
- LeetCode——Distinct Subsequences
- leetcode——Distinct Subsequences
- leetcode 115 —— Distinct Subsequences
- Distinct Subsequences 动态规划 没有太看懂的一题(重重重)-----重看
- 【leetcode】String——Distinct Subsequences(115)
- Leetcode05——Longest Palindromic Substring && 115 Distinct Subsequences
- java边界布局器小测试
- Fast Tracking via Spatio-Temporal Context Learning(时空上下文视觉跟踪)
- 帧动画
- STL 简单 stack 的实现
- 自动设置Linux系统静态IP地址、DNS、网关、计算机名称脚本
- 动态规划——distinct-subsequences
- 指数平滑法
- HDU 1505
- 2016/5/21 1000.multiple inheritance
- jquery-animate动画
- CentOS下nginx启动脚本
- HDOJ/HDU 1250 Hat's Fibonacci(大数~斐波拉契)
- Java Environment Setup
- c++ 错误点集锦