115.不同的子序列
【LetMeFly】115.不同的子序列
力扣题目链接:https://leetcode.cn/problems/distinct-subsequences/
给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。
字符串的一个 子序列 是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,"ACE" 是 "ABCDE" 的一个子序列,而 "AEC" 不是)
题目数据保证答案符合 32 位带符号整数范围。
示例 1:
输入:s = "rabbbit", t = "rabbit"输出:3解释: 如下图所示, 有 3 种可以从 s 中得到"rabbit" 的方案。rabbbitrabbbitrabbbit
示例 2:
输入:s = "babgbag", t = "bag"输出:5解释: 如下图所示, 有 5 种可以从 s 中得到"bag" 的方案。babgbagbabgbagbabgbagbabgbagbabgbag
提示:
0 <= s.length, t.length <= 1000s和t由英文字母组成
方法一:动态规划
$dp[i][j]$:s的前i个字符的子串的子序列中,t的前j个字符的子串出现的次数
转移方程:
$\begin{cases}dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j]& \text{ if } s[i]=s[j] \dp[i][j] = dp[i - 1][j]& \text{ if } s[i]\neq s[j] \end{cases}$
初始值$dp[i][0]=1$(T为空的时候,方案数为1)
- 时间复杂度$O(mn)$,其中$m=s.size(), n=t.size()$
- 空间复杂度$O(mn)$
AC代码
C++
1 | |
同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/125820358
115.不同的子序列
https://blog.letmefly.xyz/2022/07/16/LeetCode 0115.不同的子序列/