JAVA学习-练习试用Java实现“不同的子序列”

问题:


给定一个字符串 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 由英文字母组成

 

解答思路:

1、题目分析:

- 本题要求计算字符串 's' 的子序列中字符串 't' 出现的个数。

- 需要找到所有可能的匹配情况,可以通过动态规划来解决。

2、主要思路:

- 定义一个二维数组 'dp',其中 'dp[i][j]' 表示字符串 's' 的前 'i' 个字符和字符串 't' 的前 'j' 个字符的匹配情况。

- 初始化边界情况,当 'j=0' 时,'dp[i][0]' 表示字符串 's' 的前 'i' 个字符是否可以通过删除一些字符得到空字符串,即 'dp[i][0]=1'。

- 递推关系为:如果 's[i]==t[j]',则 'dp[i][j]=dp[i-1][j-1]+dp[i-1][j]';否则 'dp[i][j]=dp[i-1][j]'。

- 最终答案为 'dp[s.length()][t.length()]'。

以下是修改后的代码:

```java

class Solution {

    public int numDistinct(String s, String t) {

        int m = s.length(), n = t.length();

        int[][] dp = new int[m + 1][n + 1];

 

        // 初始化边界情况

        for (int i = 0; i <= m; i++) {

            dp[i][0] = 1;

        }

 

        // 动态规划

        for (int i = 1; i <= m; i++) {

            for (int j = 1; j <= n; 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[m][n];

    }

}

```

(文章为作者在学习java过程中的一些个人体会总结和借鉴,如有不当、错误的地方,请各位大佬批评指正,定当努力改正,如有侵权请联系作者删帖。)

 

 

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

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

相关文章

Linux下find命令使用介绍

Linux下的find命令是一个功能强大的文件搜索工具&#xff0c;它能够遍历指定目录层次结构&#xff0c;根据一系列预设条件来查找并操作文件和目录。find命令的灵活性在于它支持多种查找条件和操作&#xff0c;使得用户能够非常精确地定位文件系统中的内容。下面是find命令的一些…

北航数据结构与程序设计图部分选填题

一、 抓两个关键信息&#xff1a;无向图&#xff0c;邻接表。无向图中&#xff0c;边&#xff08;vi&#xff0c;vj&#xff09;要在vi的链表中记录一次&#xff0c;再以&#xff08;vj&#xff0c;vi&#xff09;的形式在vj的链表中记录一次。 每个边都要记录两次&#xff0c…

文心一言 VS 讯飞星火 VS chatgpt (285)-- 算法导论21.2 4题

四、请给出图 21-3 所示操作序列的一个运行时间的渐近紧确界&#xff0c;假定使用链表表示和加权合并启发式策略。如果要写代码&#xff0c;请用go语言。 文心一言&#xff1a; 图 21-3 没有直接给出&#xff0c;但通常这种操作序列可能与某种数据结构&#xff08;如并查集或…

Flink On Yarn实操演示

这课的学习我们基本上了解了flink on line的一些基本原理&#xff0c;以及相应的一些集群的一些参数配置。通过本节课的学习&#xff0c;我们将去通过一些实际的一些操作&#xff0c;然后来去看flink on your的一个集群的具体的一个部署的一个流程。我们接下来看一下这个flink …

Seal^_^【送书活动第7期】——《IT项目经理进阶之道》

Seal^_^【送书活动第7期】——《IT项目经理进阶之道》 一、参与方式二、本期推荐图书2.1 作者荐语2.2 编辑推荐2.3 图书简介2.4 前言2.5 目 录 三、正版购买 从领导、客户、下属、供应商四个角度&#xff0c;介绍IT项目经理在实际工作中需要面对的挑战&#xff0c;以及一些常见…

【C++】哈希的概念及STL中有关哈希容器的使用

目录 前言一、unordered系列关联式容器1.1 标准库中的unordered_set1.1.1 unordered_set的介绍1.1.2 unordered_set的常用接口说明1.1.2.1 unordered_set对象的常见构造1.1.2.1.1 [无参构造函数](https://legacy.cplusplus.com/reference/unordered_map/unordered_map/)1.1.2.1…

置信度是什么

置信度&#xff08;Confidence&#xff09;在统计学和机器学习中是一个重要的概念&#xff0c;反映了一个估计值或预测结果的可靠性和准确性。置信度通常通过置信区间或置信水平来表示。 置信区间 置信区间&#xff08;Confidence Interval&#xff09;是一个范围&#xff0c…

laravel中如何向字段标签添加工具提示

首先&#xff0c;您可以使用 轻松自定义字段标签->label()。我相信您知道这一点。但您知道吗……标签输出未转义&#xff1f;这意味着您也可以在标签中包含 HTML。 为了尽快实现上述目标&#xff0c;我只是采取了一个快速而粗糙的解决方案&#xff1a; CRUD::field(nickna…

速盾:阿里云ddos黑洞是怎么回事?

阿里云ddos黑洞是一种防御分布式拒绝服务&#xff08;DDoS&#xff09;攻击的安全机制。DDoS攻击是指利用大量的合法请求占用目标服务器的资源&#xff0c;从而使服务器无法正常响应合法用户的请求。为了应对这种攻击&#xff0c;阿里云引入了黑洞机制。 黑洞机制是一种主动防…

常用快捷键-快速开发-mac idea 查看侧边栏tool window project+新建文件快捷键

背景&#xff1a;来到公司后&#xff0c;换了mac系统&#xff0c;有点不习惯&#xff0c;于是自己重新设置了开发的快捷键 1、mac idea 查看侧边侧栏&#xff08;专业说法是Tool Window Project&#xff09;&#xff1a; 每次我们都要点击一下左上角的这个类似于文件夹的图标…

竞赛选题 python 机器视觉 车牌识别 - opencv 深度学习 机器学习

1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于python 机器视觉 的车牌识别系统 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;3分 &#x1f9ff; 更多资…

代码走查的一个实例

1996年6月23日至7月1日&#xff0c;我被点名到四川某单位协助排查某系统的技术问题。 我不懂该系统的原理&#xff0c;也不懂硬件&#xff0c;只能从软件角度分析问题。 那时&#xff0c;我所在单位已经为一家美国公司做了3年的软件第三方独立验证和测试&#xff0c;从中学到…

人工智能的未来和挑战

人工智能将继续以其强大的变革力量推动科学研究、医疗保健、经济活动和社会治理的深刻变革。 一方面&#xff0c;我们期待AI在药物研发、精准医疗、气候预测、新材料探索等领域带来更多的颠覆性创新&#xff0c;进一步缩短科研周期、提升医疗服务质量&#xff0c;以及优化全球…

基于随机森林的鲍鱼年龄预测

文章目录 1.作者介绍2&#xff0e;关于理论方面的知识介绍2.1 背景介绍2.1.1基本概念2.1.2算法步骤2.1.3优势2.1.4劣势2.1.5应用场景2.1.6随机森林的重要变体2.1.7相关理论 2.2随机森林算法架构2.2.1 数据预处理与采样2.2.2构建决策树2.2.3决策树的训练2.2.4集成模型2.2.5 模型…

写给程序员看的LangChain入门指南来了(送PDF版)

《LangChain入门指南》 LangChain作为大模型集成框架鼎鼎大名&#xff0c;这本《LangChain入门指南》是一本很及时的书&#xff0c;值得推荐&#xff5e; 01 为什么需要LangChain 首先想象一个开发者在构建一个LLM应用时的常见场景。 当你开始构建一个新项目时&#xff0c;…

初阶 《数组》 3. 数组越界

3. 数组越界 数组的下标是有范围限制的。 数组的下规定是从0开始的&#xff0c;如果数组有n个元素&#xff0c;最后一个元素的下标就是n-1。 所以数组的下标如果小于0&#xff0c;或者大于n-1&#xff0c;就是数组越界访问了&#xff0c;超出了数组合法空间的访问。 C语言本身…

极验行为式验证码适配Harmony 鸿蒙SDK下载

现阶段&#xff0c;越来越多的开发者正在积极加入鸿蒙生态系统。随着更多开发者的参与&#xff0c;早在去年9月&#xff0c;极验就成为首批拥有鸿蒙NEXT内测版本和手机系统测试机会的验证码供应商。 为了提高各开发者及企业客户集成鸿蒙版本行为验4.0的效率&#xff0c;方便大家…

leetcode 动态规划 (基础版) 下降路径最小和

题目&#xff1a; 题解&#xff1a; 这题和三角型路径和相似&#xff0c;但这题无法在像哪一题一样通过换一个方向逃避下标特判。所以这道题就写一个下标特判的方案。特殊的下标是每一行的第一个元素和最后一个元素&#xff0c;它们由头上的一个元素和左上和右上中的其中一个…

python magic_number对照表(python1.5-python3.12)

文章目录 前言获取Magic NumberMagic Number对照表 其它相关推荐&#xff1a; Python3.9及以上Pyinstaller 反编译教程(exe转py) 前言 Python3.7及以上版本的编译后二进制文件中&#xff0c;头部除了四字节Magic Number&#xff0c;还有四个字节的空位和八个字节的时间戳 大小…

Spring Boot组件化与参数校验

Spring Boot组件化与参数校验 Spring Boot版本选择 2.3.x版本 2.6.x版本 Spring Boot核心思想 约定大于配置&#xff0c;简化繁琐的配置 Spring Boot自动配置原理 SpringBootApplication: Spring Boot应用标注在某个类上说明这个类是SpringBoot的主配置类&#xff0c;Spr…