首页 > 试题广场 >

不同的子序列

[编程题]不同的子序列
  • 热度指数:19635 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
给定两个字符串S和T,返回S子序列等于T的不同子序列个数有多少个?
字符串的子序列是由原来的字符串删除一些字符(也可以不删除)在不改变相对位置的情况下的剩余字符(例如,"ACE"is a subsequence of"ABCDE"但是"AEC"不是
例如:
S="nowcccoder", T = "nowccoder"
返回3
示例1

输入

"nowcccoder","nowccoder"

输出

3
头像 华科不平凡
发表于 2020-08-25 10:27:57
“求子序列个数”,毋庸置疑,这是一道动态规划题。首先定义dp[i][j]的含义:S[0..j-1]中包含T[0..i-1]的子序列个数,接下来定义状态公式: 状况1: dp[i][j]=dp[i][j-1](如果T[i-1]!=S[j-1]) 状况2:dp[i][j]=dp[i][j-1] + d 展开全文
头像 牛客141762904号
发表于 2020-03-24 23:43:05
用了一个下午,,,,和晚上,vegetable 思路: 目标的抽取,即问题的解构或者拆解方式:用dp,将问题抽取为在每个母串的各个长度区间上(0-n),各个长度的子串(0-m)在这个区间上匹配的数目。用一个二维表格,行是字串的各个字母,列是母串的各个字母。每个元素的行i代表此次迭代所用字串为0-i的 展开全文
头像 ls.joshua
发表于 2020-04-21 11:38:44
状态转移方程:dp[i][j] = sum(dp[i-1][0],...,dp[i-1][j-1]);还可以继续优化,可以用空间换时间,减少求解dp[i][j]的查询数量,贴出代码,请大佬给出更优的算法,以此共勉! class Solution { public: int numDistin 展开全文
头像 牛客Yhq
发表于 2023-03-25 14:14:38
// 状态F[i,j]:S的前i个字符的子序列 与 T的前j个字符相等 的不同子序列数 // 转移方程:F[i,j]=?这里要进行一个判断: // 如果S[i-1]==T[j-1],则S的第i个字符可以使用,但我们可以选择是否使用 // 1.使用:F(i,j)=F 展开全文
头像 哈哈哈哈鹅
发表于 2021-11-19 00:12:26
public class Subsequence {     public static  int numDistinct(String s, String t 展开全文
头像 牛马ID
发表于 2022-03-26 10:55:21
无空间优化版本: /** * * @param S string字符串 * @param T string字符串 * @return int整型 返回 S 的子序列中 == T 的不同子序列的个数! 即返回 能 展开全文