当前位置: 首页 > news >正文

不同的子序列

题目

给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。

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

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

示例 1:

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

示例 2:

输入:s = "babgbag", t = "bag"
输出:5
解释:
如下图所示, 有 5 种可以从 s 中得到 "bag" 的方案。 
(上箭头符号 ^ 表示选取的字母)
babgbag
^^ ^
babgbag
^^    ^
babgbag
^    ^^
babgbag^  ^^
babgbag^^^

提示:

0 <= s.length, t.length <= 1000
s 和 t 由英文字母组成

参考答案

class Solution {
public:int numDistinct(string s, string t) {int m = s.length(), n = t.length();if (m < n) {return 0;}vector<vector<long>> dp(m + 1, vector<long>(n + 1));for (int i = 0; i <= m; i++) {dp[i][n] = 1;}for (int i = m - 1; i >= 0; i--) {char sChar = s.at(i);for (int j = n - 1; j >= 0; j--) {char tChar = t.at(j);if (sChar == tChar) {dp[i][j] = dp[i + 1][j + 1] + dp[i + 1][j];} else {dp[i][j] = dp[i + 1][j];}}}return dp[0][0];}
};

http://www.mrgr.cn/news/39204.html

相关文章:

  • elastic search 后端启动成功标志(二)
  • NLP任务之预测最后一个词
  • 程序员数学 | 用递归将复杂的问题简单化(上)
  • 企业如何提升知识产权管理效率?
  • rocketmq集群模式介绍
  • 【AI大模型】Function Calling
  • Python NumPy 读取与保存数据:高效处理数据文件
  • 九块九付费进群系统 wxselect SQL注入漏洞
  • Foo a30 = Foo(123);会调用哪些构造函数
  • 第十四周学习周报
  • 先刮腻子还是先装柜子好呢?
  • 系统数据文件和信息
  • 从传统 RAG 到图 RAG,赋予大型语言模型更强大的知识力量
  • Unity3D 创建一个人物,实现人物的移动
  • C++中的多态(详细讲解)
  • 【Android 14源码分析】Activity启动流程-1
  • CO-DETR追踪损失函数情况
  • 谷歌收录批量查询,如何批量查询谷歌收录以及提交网站进行收录的方法
  • 服务器开通个人账户
  • 初识Linux以及Linux的基本命令