1 动态规划解不同的子序列

来源:

LeetCode第115题

难度:

困难

问题描述

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

注解:

字符串的一个子序列是指,通过删除一些(也可以不删除)字符且不干扰剩余字符的相对位置所组成的新字符串(例如,"ACE"是"ABCDE"的一个子序列,而"AEC"不是),题目数据保证答案符合32位带符号整数范围。

示例:

输入:s="rabbbit",t="rabbit"
输出:有三种可以从s中获得"rabbit"的方案:rabbbit、rabbbit、rabbbit

动态规划解决

对于这种A和B子串的题目,多使用动态规划来进行解决,我们使用dp[i][j]表示t的前i个字符串可以由s的前j个字符组成的个数,最终求出dp[tLength][sLength]即可(tLength和sLength)分别表示t和s的长度:
 

public int numTinS(String T,String S)//子串T作为第一个参数,母串S作为第二个参数
{
//求解子串和母串的长度用于生成动态规划数组dp[][]
int TLength=T.length();
int SLength=S.length();
//生成动态规划数组
int dp[][]=new int[TLength][SLength];
//动态数组的第一项工作就是初始化,对于二维dp数组,常需要初始化dp[0][0]、dp[i][0]、dp[0][j]
//初始化dp[0][0],也就是子串T的第一个字符(下标为0)与母串S的第一个字符是否相等
if(T.charAt(0)==S.charAt(0))
{
dp[0][0]=1;
}else
{
dp[0][0]=0;
}
//初始化dp[0][i]也就是子串的第一个字母在母串S中的出现次数
for(int i=1;i<SLength;i++)
{
if(T.charAt(0)==S.charAt(i))
{
dp[0][i]=dp[0][i-1]+1;
}else
{
dp[0][i]=dp[0][i-1];
}
}
//初始化dp[j][0],由于全部子串不可能比母串长,从而都是0
for(int i=1;i<TLength;i++)
{
dp[i][0]=0;
}for(int i=1;i<TLength;i++)
{
for(int j=1;j<SLength;j++)
{
if(T.charAt(i)==S.charAt(j))
{
//如果i和j相同,那么可以由子串的前i个字符在母串的j-1个字符中的个数dp[i][j-1]加上
//子串前i-1个字符在母串的j-1个字符的个数,第i和第j已经对应
dp[i][j]=dp[i][j-1]+dp[i-1][j-1];
}else
{
dp[i][j]=dp[i][j-1];
}
}
}
return dp[TLength-1][SLenhgth-1];
}

总结:求解数组的长度用String.length()方法,申请二维数组使用int dp[][]=new int [length1][length2];在求解两个数组问题时要想到动态规划。

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

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

相关文章

2022年03月 Scratch(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 以下四个选项中,运行哪个积木块,可能得到523这个数值? A: B: C: D: 答案:B 四个选项都遵循统一的公式:随机数ⅹ10+3=523,因此可以得出随

ZXing创建二维码位图

Android生成二维码通常使用ZXing库&#xff0c;其中提供了QRCodeWriter类。QRCodeWriter可将字符串编译为位矩阵BitMatrix&#xff0c;然后我们可以将位矩阵转为Int数组&#xff0c;通过bitmap.setPixels()方法将数组绘制于位图上。 1. 添加依赖 //Gradle Scripts -> buil…

和数集团出席中科院上海高研院​第三十三期“高研交叉论坛”信息能源融合专场

2023年11月21日&#xff0c;中国科学院上海高等研究院第三十三期“高研交叉论坛”信息能源融合专场在上海高研院成功举办。本次论坛由中国科学院上海高等研究院智能信息通信技术研究与发展中心、中国科学院低碳转化科学与工程重点实验室、中科院和数智能区块链与能源系统应用联…

【文末送书】机器学习高级实践

2023年初是人工智能爆发的里程碑式的重要阶段&#xff0c;以OpenAI研发的GPT为代表的大模型大行其道&#xff0c;NLP领域的ChatGPT模型火爆一时&#xff0c;引发了全民热议。而最新更新的GPT-4更是实现了大型多模态模型的飞跃式提升&#xff0c;它能够同时接受图像和文本的输入…

仿 美图 / 饿了么,店铺详情页功能

前言 UI有所不同&#xff0c;但功能差不多&#xff0c;商品添加购物车功能 正在写&#xff0c;写完会提交仓库。 效果图一&#xff1a;左右RecyclerView 联动 效果图二&#xff1a;通过点击 向上偏移至最大值 效果图三&#xff1a;通过点击 或 拖动 展开收缩公告 效果图四&…

SpringBoot3核心原理

SpringBoot3核心原理 事件和监听器 生命周期监听 场景&#xff1a;监听应用的生命周期 可以通过下面步骤自定义SpringApplicationRunListener来监听事件。 ①、编写SpringApplicationRunListener实现类 ②、在META-INF/spring.factories中配置org.springframework.boot.Sprin…

上市公司-股权性质数据(国企、央企)2003-2022年

上市公司-股权性质数据&#xff08;国企、央企&#xff09;是一个针对上市公司的数据集&#xff0c;主要涵盖了A股公司股权性质的详细信息&#xff0c;区分了公司是否为民营企业、国企或央企。这份数据集提供了每家上市公司的股权结构背景&#xff0c;对投资者、市场分析师和经…

Shell循环:for(二)

一、通过用户列表文件创建用户 需求&#xff1a;通过用户列表文件创建用户 [rootlocalhost ~]# cat user.txt qian yoa huang演示&#xff1a; [rootlocalhost ~]# vim foruser.sh #编写脚本 #!/bin/bash for i in cat user.txt do useradd $i if [ $? -eq 0 ] thenech…

2023年亚太杯数学建模C题新能源汽车成品文章(思路模型代码成品)

一、翻译 新能源汽车是指采用先进的技术原理、新技术和新结构&#xff0c;以非常规车用燃料&#xff08;非常规车用燃料是指汽油和柴油以外的燃料(非常规车用燃料是指汽油和柴油以外的燃料&#xff09;&#xff0c;并集成了汽车动力控制和驱动等先进技术的汽车。新能源汽车包括…

C++入门第九篇---Stack和Queue模拟实现,优先级队列

前言&#xff1a; 我们已经掌握了string vector list三种最基本的数据容器模板&#xff0c;而对于数据结构的内容来说&#xff0c;其余的数据结构容器基本都是这三种容器的延申和扩展&#xff0c;在他们的基础上扩展出更多功能和用法&#xff0c;今天我们便来模拟实现一下C库中…

superset 后端增加注册接口

好烦啊-- &#xff1a;< 1.先定义modes: superset\superset\models\user.py # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information…

Tars框架 Tars-Go 学习

Tars 框架安装 网上安装教程比较多&#xff0c;官方可以参数这个 TARS官方文档 (tarsyun.com) 本文主要介绍部署应用。 安装完成后Tars 界面 增加应用amc 部署申请 amc.GoTestServer.GoTestObj 名称不知道的可以参考自己创建的app config 点击刷新可以看到自己部署的应用 服…

获取当日的日期三个月后的日期

使用 java.time.LocalDate 类进行计算 import java.time.LocalDate;public class ThreeMonthsLaterExample {public static void main(String[] args) {// 获取当前日期LocalDate currentDate LocalDate.now();// 添加三个月LocalDate threeMonthsLater currentDate.plusMont…

【阿里云服务器】2023安装宝塔面板8.0.4

文章目录 前言安装宝塔远程链接服务器输入安装宝塔命令放行宝塔端口 一键安装环境附录重装系统Linux系统卸载宝塔方式一方式二 遇见的问题 前言 镜像是CentOS 7.9.4 安装宝塔 远程链接服务器 输入安装宝塔命令 yum install -y wget && wget -O install.sh https://…

Android 13.0 系统settings系统属性控制一级菜单显示隐藏

1.概述 在13.0的系统rom定制化开发中,系统settings的一级菜单有些在客户需求中需要去掉不显示,所以就需要通过系统属性来控制显示隐藏, 从而达到控制一级菜单的显示的目的,而系统settings是通过静态加载的方式负责显示隐藏,接下来就来实现隐藏显示一级菜单的 功能实现 2.…

2023年亚太杯数学建模A题水果采摘机器人的图像识别功能(基于yolov5的苹果分割)

注&#xff1a;.题中附录并没有给出苹果的标签集&#xff0c;所以需要我们自己通过前4问得到训练的标签集&#xff0c;采用的是yolov5 7.0 版本&#xff0c;该版本带分割功能 一&#xff1a;关于数据集的制作&#xff1a; clc; close all; clear; %-----这个是生成yolov5 数据…

任务4-绘制图形

python字典的使用方法 !echo $(date)‘开始下载并解压’ && curl -o Task4.zip https://zyenv-1302342904.cos.ap-guangzhou.myqcloud.com/datas/TianJin/Task4_TJ_ZZ.zip && unzip -o Task4.zip > /dev/null 2>&1 && echo $(date)‘解压完…

学习课题:逐步构建开发播放器【QT5 + FFmpeg6 + SDL2】

目录 一、播放器开发(一)&#xff1a;播放器组成大致结构与代码流程设计 二、播放器开发(二)&#xff1a;了解FFmpeg与SDL常用对象和函数 三、播放器开发(三)&#xff1a;FFmpeg与SDL环境配置 四、播放器开发(四)&#xff1a;多线程解复用与解码模块实现 五、播放器开发(五…

Linux应用开发基础知识——I2C应用编程(十三)

一、无需编写驱动程序即可访问 I2C 设备 APP 访问硬件肯定是需要驱动程序的&#xff0c;对于 I2C 设备&#xff0c;内核提供了驱动程序 drivers/i2c/i2c-dev.c&#xff0c;通过它可以直接使用下面的 I2C 控制器驱动程序来访问 I2C 设备。 i2c-tools 是一套好用的工具&#xff0…

虚拟机系列:Oracle VM VirtualBox虚拟机的使用教程和使用体验情况反馈

Oracle VM VirtualBox虚拟机的使用教程和使用体验情况反馈 一. 简述:二. 下载三. 安装解压后选择需要的版本点击安装1:第一步,点击安装,点击下一步2. 这里直接点击下一步,3. 网络警告选择:是4. 准备好以后,点击安装5. 点击完成即可四. 打开五. 创建虚拟机1. 输入虚拟机名…