LeetCode-115.不同的子序列(相关话题:动态规划)
2018-10-19 19:21
411 查看
给定一个字符串 S 和一个字符串 T,计算在 S 的子序列中 T 出现的个数。
一个字符串的一个子序列是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,"ACE" 是 "ABCDE" 的一个子序列,而 "AEC" 不是)
示例 1:
[code]输入: S = "rabbbit", T = "rabbit" 输出: 3
解释:
[code]如下图所示, 有 3 种可以从 S 中得到 "rabbit" 的方案。 (上箭头符号 ^ 表示选取的字母) rabbbit ^^^^ ^^ rabbbit ^^ ^^^^ rabbbit ^^^ ^^^
示例 2:
[code]输入: S = "babgbag", T = "bag" 输出: 5
解释:
如下图所示, 有 5 种可以从 S 中得到 "bag" 的方案。 (上箭头符号 ^ 表示选取的字母)
[code]babgbag ^^ ^ babgbag ^^ ^ babgbag ^ ^^ babgbag ^ ^^ babgbag ^^^
解题思路:动态规划,辅助数组p[][],p[i][j]表示在S[0~i]的子序列中T[0~j]出现的个数
递推公式:p[i][j] = p[i-1][j] + (s.charAt(i) == t.charAt(j) ? p[i-1][j-1] : 0)
Java代码:
[code]class Solution { public int numDistinct(String s, String t) { int m = s.length(), n = t.length(); if(m == n && 0 == m) return 1; if(m < n) return 0; int[][] p = new int[m] ; p[0][0] = s.charAt(0) == t.charAt(0) ? 1 : 0; for(int i = 1; i < m; i++){ p[i][0] = s.charAt(i) == t.charAt(0) ? p[i-1][0]+1 : p[i-1][0]; } for(int i = 1; i < m; i++){ for(int j = 1; j <= i && j < n; j++){ p[i][j] = p[i-1][j] + (s.charAt(i) == t.charAt(j) ? p[i-1][j-1] : 0); } } return p[m-1][n-1]; } }阅读更多
相关文章推荐
- LeetCode-121.买卖股票的最佳时机(相关话题:动态规划)
- LeetCode-123.买卖股票的最佳时机III(相关话题:动态规划)
- LeetCode-119.杨辉三角II(相关话题:数组)
- 已知前序(后序)遍历序列和中序遍历序列构建二叉树(Leetcode相关题目)
- LeetCode-125.验证回文串(相关话题:字符串)
- [LeetCode 115] - 不同子序列(Distinct Subsequences)
- [LeetCode] Count Different Palindromic Subsequences 计数不同的回文子序列的个数
- Distinct Subsequences(不同子序列的个数)——b字符串在a字符串中出现的次数、动态规划
- LeetCode: Distinct Subsequences(不同子序列的个数)
- Maximum Subarray连续子序列最大和 -- LeetCode(经典动态规划)
- leetcode 673. Number of Longest Increasing Subsequence LISS最长递增子序列数量+动态规划
- LeetCode-126.单词接龙II(相关话题:Dijkstra算法+深度优先)
- LeetCode: Maximum Product Subarray && Maximum Subarray &子序列相关
- LeetCode-127.单词接龙(相关话题:广度优先)
- 【动态规划】最长上升子序列及其相关思想
- leetcode 300. Longest Increasing Subsequence-最长子序列|动态规划
- LeetCode-122.买卖股票的最佳时机II(相关话题:贪心算法)
- leetcode:Distinct Subsequences (不同的子序列)【面试算法题】
- leetcode之二叉树类之二叉树深度系列-----104/111/110/108/109 二叉树最大/最小深度/AVL树的判断和由有序序列生成(牵扯分治相关,OJ105/106)