leetcode distinct subsequences dp solution
来源:互联网 发布:手机淘宝切换账号 编辑:程序博客网 时间:2024/05/18 23:55
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.
http://leetcode.com/onlinejudge#question_115
this is quite similar to the common subsequence problem. so dp comes to your mind.
it's not quite straightforward, so we can first try recursion. the idea is when you find s[i]=t[j], use recursion for two remaining substrings. base case is when the substring of t is null, then you can plus one for the distinct numbers. and don't forget to use memorizing to reduce redundant recursions.
so for dp, the idea is similar. dp[i][j]= dp[i-1][j] + (s[i]==t[j])?dp[i-1][j-1]:0; it means if you find two chars are same, then you have the same number of dinstinct subs of dp[i-1][j-1]. otherwise, it will be simply dp[i-1][j] which is the previous sub no.
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.
http://leetcode.com/onlinejudge#question_115
this is quite similar to the common subsequence problem. so dp comes to your mind.
it's not quite straightforward, so we can first try recursion. the idea is when you find s[i]=t[j], use recursion for two remaining substrings. base case is when the substring of t is null, then you can plus one for the distinct numbers. and don't forget to use memorizing to reduce redundant recursions.
so for dp, the idea is similar. dp[i][j]= dp[i-1][j] + (s[i]==t[j])?dp[i-1][j-1]:0; it means if you find two chars are same, then you have the same number of dinstinct subs of dp[i-1][j-1]. otherwise, it will be simply dp[i-1][j] which is the previous sub no.
public class Solution { public int numDistinct(String S, String T) { int l=S.length(),m=T.length(); if(m==0||l==0) return 0; int dp[][]=new int[l][m]; for(int i=0;i<l;i++){ for(int j=0;j<=Math.min(i,m-1);j++){ if(S.charAt(i)==T.charAt(j)){ dp[i][j]=(i==0||j==0)?1:dp[i-1][j-1]; } dp[i][j]+=i-1<j?0:dp[i-1][j]; } } return dp[l-1][m-1]; // Start typing your Java solution below // DO NOT write main() function }}
- leetcode distinct subsequences dp solution
- leetcode Distinct Subsequences DP
- Leetcode dp Distinct Subsequences
- [leetcode][DP] Distinct Subsequences
- LeetCode Distinct Subsequences DP
- leetcode---distinct subsequences---dp
- leetcode -- Distinct Subsequences -- DP重点
- 【dp】leetcode 115. Distinct Subsequences
- Leetcode 115 - Distinct Subsequences(dp)
- Lintcode118 Distinct Subsequences solution 题解
- 【DP】Distinct Subsequences
- LeetCode Distinct Subsequences
- [LeetCode]Distinct Subsequences
- [Leetcode] Distinct Subsequences *
- [leetcode] Distinct Subsequences
- [LeetCode] Distinct Subsequences
- [Leetcode] Distinct Subsequences
- leetcode 111: Distinct Subsequences
- Java中的StringBuilder类功能详解
- Maya项目文件设置
- Logistic regression (逻辑回归) 概述
- dlink中设置端口映射图文讲解(解决电驴tcp链接测试失败问题)
- cocos2d-x内存管理机制
- leetcode distinct subsequences dp solution
- leetcode 69: Combinations
- androidUI开发之-优化你的布局层次结构
- Linux下消息队列小例子
- 位图的光栅操作
- 画笔的光栅操作
- VC++之图形设备接口------基本概念
- PHP导出MySQL数据到Excel文件
- IW22 BADI:NOTIF_EVENT_SAVE 报Message的问题