distinct sequence Google
2015-09-16 08:35
417 查看
leetcode ,暴力解法dfs, 双指针,不行
A Clever way to solve it: (Dynamic Programming)
solution: Let W(i, j) stand for the number of subsequences of S(0, i) equals to T(0, j). If S.charAt(i) == T.charAt(j), W(i, j) = W(i-1, j-1) + W(i-1,j); Otherwise, W(i, j) = W(i-1,j).
public int numDistinct(String s, String t) { return numDistinctHelper(s,t,0,0); } public int numDistinctHelper(String s, String t, int si, int ti){ if(ti == t.length()) { return 1; } if(si >= s.length()){ return 0; } int count = 0; for(int i = si; i < s.length(); i++){ if(s.charAt(i) == t.charAt(ti)){ count += numDistinctHelper(s, t, i+1, ti+1); } } return count; }
A Clever way to solve it: (Dynamic Programming)
solution: Let W(i, j) stand for the number of subsequences of S(0, i) equals to T(0, j). If S.charAt(i) == T.charAt(j), W(i, j) = W(i-1, j-1) + W(i-1,j); Otherwise, W(i, j) = W(i-1,j).
public int numDistinct(String S, String T) { int[][] table = new int[S.length() + 1][T.length() + 1]; for (int i = 0; i < S.length(); i++) table[i][0] = 1; for (int i = 1; i <= S.length(); i++) { for (int j = 1; j <= T.length(); j++) { if (S.charAt(i - 1) == T.charAt(j - 1)) { table[i][j] += table[i - 1][j] + table[i - 1][j - 1]; } else { table[i][j] += table[i - 1][j]; } } } return table[S.length()][T.length()]; }
相关文章推荐
- UITouch 触摸事件处理(实例)
- UI高级第二课  多线程和GCD——iOS学习连载30
- UI高级第一课  block语法——iOS学习连载29
- Java工程(3)——但从谈论用户的角度UI图案
- iOS学习总结----UIScrollView的常用属性及方法
- UIButton中setTitleEdgeInsets和setImageEdgeInsets的使用
- *LeetCode-Implement Stack using Queues
- Xcode6中segue取消原push与modal选项后新增选项的解释
- LeetCode-Implement Queue using Stacks
- iOS UI基础-7.0 UIScrollView
- 调用删除方法UITableView deleteRowsAtIndexPaths的时候就挂掉
- ZOJ 3892 Available Computation Sequence
- word frequency
- range for query
- POJ - 2524 Ubiquitous Religions(并查集)
- 队列queue
- iOS开发 - UISearchController实现搜索功能
- Xcode的SVN提示"The request timed out."的解决方案
- 一行代码搞定UITextView的placeholder
- android高仿微信UI点击头像显示大图片效果