115.不同的子序列

给你两个字符串 s 和 t ,统计并返回在 s 的 子序列 中 t 出现的个数,结果需要对 109 + 7 取模。

示例 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

提示:

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

思路:

dp[i][j]表示s的前s个字符中含有多少个t串的前j个字符,dp[0][0]表示两个空串匹配,所以赋值为1,同理,对于dp[[0~i][0]的数据全赋值为1。对于s[i]==t[j],分两种情况,要么使用s[i-1]这个字符进行匹配,要使用这个字符进行匹配的话,那么当且仅当t[j-1]也等于s[i-1]时才行,此时符合的情况等于dp[i-1][j-1],最后一个字符相同,比较前边的就是了。如果不使用s[i-1]时,那么就得从前边去找t[j-1]

,即dp[i-1][j]。如果s[i]!=t[j],dp[i][j]=dp[i-1][j];

代码:

class Solution {

  public int numDistinct(String s, String t) {

        int[][] dp = new int[s.length()+1][t.length()+1];

        int m = (int) Math.pow(10, 9) + 7;

        for (int i = 0; i <= s.length(); i++) {

            dp[i][0] = 1;

        }

        for (int i = 1; i <= s.length(); i++) {

            for (int j = 1; j <= t.length() && j <= i; j++) {

                if (s.charAt(i-1) == t.charAt(j-1))

                    dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j];

                else

                    dp[i][j] = dp[i - 1][j];

            }

        }

        return dp[s.length()][t.length()];

    }

}

结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/597917.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[AI in sec]-039 DNS隐蔽信道的检测-特征构建

DNS隐蔽信道是什么 DCC是指利用DNS数据包中的可定义字段秘密传递信息的通道。其中,“DNS 协议”是目前网络上使用的标准域名解析协议;“可定义字段”是DNS 数据包中的 QNAME 字段、RDATA 字段及RawUDP字段。利用DNS数据包可以构建2种信道:存储信道及时间信道。DCC可以被用于…

CTF之GET和POST

学过php都知道就一个简单传参&#xff0c;构造payload:?whatflag得到 flag{3121064b1e9e27280f9f709144222429} 下面是POST那题 使用firefox浏览器的插件Hackbar勾选POST传入whatflag flag{828a91acc006990d74b0cb0c2f62b8d8}

通过Omnet++官网tictoc教程学习在Omnet++中构建和运行仿真 Part1Part2

introduce开始模型介绍构建项目添加 NED 文件添加C 文件添加 omnetpp.ini总结 运行仿真启动仿真程序运行仿真调试运行时错误崩溃断点调试下一事件 调试/运行 日志序列图可视化 Omnet官网 TicToc教学 introduce 在 Omnet安装完成后&#xff0c;samples/tictoc 中有该例子的完整…

Unity Toggle组件

Toggle Group组件 Allow Switch Off属性值为false时&#xff0c; 1&#xff0c;Toggle初始时默认会有一个被勾选&#xff08;ison为true&#xff09;&#xff0c;可以自己打勾指定 2&#xff0c;不能取消勾选 Allow Switch Off属性值为true时&#xff0c; 1&#xff0c;Toggl…

第十四届蓝桥杯岛屿个数

题目描述&#xff1a; 小蓝得到了一副大小为 MN 的格子地图&#xff0c;可以将其视作一个只包含字符 0&#xff08;代表海水&#xff09;和 1&#xff08;代表陆地&#xff09;的二维数组&#xff0c;地图之外可以视作全部是海水&#xff0c;每个岛屿由在上/下/左/右四个方向上…

C++:类与对象(一)

hello&#xff0c;各位小伙伴&#xff0c;本篇文章跟大家一起学习《C&#xff1a;类与对象&#xff08;一&#xff09;》&#xff0c;感谢大家对我上一篇的支持&#xff0c;如有什么问题&#xff0c;还请多多指教 &#xff01; 文章目录 面向对象和面向过程的区别1.类的引入2.…

调用飞书获取用户Id接口成功,但是没有返回相应数据

原因&#xff1a; 该自建应用没有开放相应的数据权限。 解决办法&#xff1a; 在此处配置即可。

Codeforces Round 932 (Div. 2) ---- F. Andrey‘s Tree ---- 题解

F. Andreys Tree&#xff1a; 题目描述&#xff1a; 思路解析&#xff1a; 我们假设删除任意一个结点后&#xff0c;我们会将整个树切分为k个联通块&#xff0c;那么可以明确的知道我们只需要连接(k-1)条边就可以将这k个联通块重新连为一棵树。 那么最小代价是啥呢? 图解分…

linux 安装JDK

一、安装jdk mkdir -p /export/servers # 软件安装的目录 0 . 使用rpm -qa | grep java 查看是否已经安装了jdk 使用: rpm -e --nodeps 软件的名称 将jdk进行卸载 执行完成后, 查看是否全部删除: 需要解压jdk的压缩包 tar -zxvf jdk-8u144-linux-x64.tar.gz -C /export/s…

如何利用AI制作Twitter推文

智能生活新体验&#xff1a;最新会话式AI如何让您的日常更便捷 人工智能制作Twitter推文时&#xff0c;会运用多种策略确保推文既简洁又有影响力。首先&#xff0c;人工智能会分析大量数据来理解不同话题的流行趋势、热门话题标签和目标受众的偏好。接着&#xff0c;它会根据这…

嵌入式面向对象学习 RT-Thread I/O 设备管理框架 设备驱动层 案例测试

嵌入式面向对象 RT-Thread I/O 设备管理框架 设备驱动层 注&#xff1a;本文介绍性内容转载于《RT-Thread记录&#xff08;十、全面认识 RT-Thread I/O 设备模型&#xff09;》 注&#xff1a; 本次使用的开发板 &#xff1a; ​ 兆易创新GD32F407VET6开发板 ​ 雅特力科技…

3D模型缩略:创造简洁而有效的呈现---模大狮模型网

在3D设计和渲染中&#xff0c;有时候我们需要在有限的空间内展示复杂的场景或模型。在这种情况下&#xff0c;将整个模型完整地呈现出来可能会显得过于拥挤或混乱。因此&#xff0c;使用缩略图是一种常见且有效的方法&#xff0c;可以简化场景&#xff0c;突出重点&#xff0c;…