Leetcode 115.不同的子序列

Leetcode 115.不同的子序列
题目连接
题目:给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。

字符串的一个 子序列 是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,“ACE” 是 “ABCDE” 的一个子序列,而 “AEC” 不是)

题目数据保证答案符合 32 位带符号整数范围。

在这里插入代码片
输入:s = "rabbbit", t = "rabbit"
输出:3
解释:
如下图所示, 有 3 种可以从 s 中得到 "rabbit" 的方案。
(上箭头符号 ^ 表示选取的字母)
rabbbit
^^^^ ^^
rabbbit
^^ ^^^^
rabbbit
^^^ ^^^

题解在官网,这里只是个人遇到的问题做个记录

Q1:为什么在dp[0][0]时就是答案?
A1:题解有一句很关键的话:
创建二维数组 dp,其中 dp[i][j] 表示在 s[i:] 的子序列中 t[j:] 出现的个数。
上述表示中,s[i:] 表示 s 从下标 ii 到末尾的子字符串,t[j:] 表示 t 从下标 j 到末尾的子字符串。

所以当i=0,j=0时,意味着从s的首字符s[0]到末尾字符s[m-1]的子序列中t[0]到t[n-1](即字符串t)出现的个数。

Q2:为什么s[i]与t[j]相等时考虑两个方面?s[i]=t[j]但是不匹配是什么意思?
A2:当相等的时候,需要判断每个t中的字符是否等于s中的字符,其中不匹配时,dp[i][j] = dp[i+1][j]意思就是如果不匹配,t[j]保持不变,移动s[i],这与题目中的可以子序列 是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。 对应。

最后就可以写题啦,不要忘了数组开大一点,不然会越界。

不一定正确,有错误欢迎大佬指出!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值