dp(九)不同的子序列

news2024/11/25 10:13:52

不同的子序列_牛客题霸_牛客网【牛客题霸】收集各企业高频校招笔面试题目,配有官方题解,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力icon-default.png?t=MBR7https://www.nowcoder.com/practice/ed2923e49d3d495f8321aa46ade9f873

描述

给定两个字符串S和T,返回S子序列等于T的不同子序列个数有多少个?

字符串的子序列是由原来的字符串删除一些字符(也可以不删除)在不改变相对位置的情况下的剩余字符(例如,"ACE"is a subsequence of"ABCDE"但是"AEC"不是)
例如:

S="nowcccoder", T = "nowccoder"

返回3

示例1

输入:

"nowcccoder","nowccoder"
返回值:
3

 题目意思就是在S串中找子串根T串相同呗,说的绕的半天没搞懂题目意思,搞懂题目意思之后就清晰了,这种一般一维的肯定做不了,直接定义二维状态,一个i访问S串,一个j访问T串,

F(i,j)表示 S串中的前i个字符在T串中前j个字符找到

在状态转移方程推导时,自己一遍画表格一边推导,当S[i] != T[j]时,直接为上方之前的结果,

当俩个元素相等的时候,(对照上图中2的位置,它的上方1 与斜上方1)然后考虑要不要删除S[i]对应字符,如果不删除,就使用上方之前的结果,如果使用S当前这第二个c字符,那就要抛弃第一个c,在组成now的情况下使用第二个c来组成nowc;把这俩种情况求和就是S串中的前i个字符在T串中前j个字符的不同序列个数

【解法一】


class Solution {
public:
    int numDistinct(string S, string T) {
        // write code here
        int row = S.size();
        int col = T.size();
        vector<vector<int>> dp(row+1, vector<int> (col+1));
        dp[0][0] = 1;
        for(int i = 1; i <= row; i++)
        {
            dp[i][0] = 1;
            for(int j = 1; j <= col; j++)
            {
                if(S[i-1] == T[j-1])
                    dp[i][j] = dp[i-1][j-1] + dp[i-1][j];
                else
                    dp[i][j] = dp[i-1][j];
            }
        }
        return dp[row][col];
    }
};

【解法二】滚动数组优化


class Solution {
public:
    int numDistinct(string S, string T) {
        int row = S.size();
        int col = T.size();
        vector<int> dp(col+1);
        dp[0] = 1;
        for(int i = 1; i <= row; i++)
            for(int j = col; j >= 1; j--)
                if(S[i-1] == T[j-1])
                    dp[j] += dp[j-1];
        return dp[col];
    }
};

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

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

相关文章

Vue知识系列-axios

一、axios基础知识 axios是独立于vue的一个项目&#xff0c;基于promise用于浏览器和node.js的http客户端。 在浏览器中可以帮助我们完成ajax请求的发送在node.js中可以向远程接口发送请求 二、axios应用场景 三、axios的使用 第一步&#xff1a;创建html文件&#xff0c;在…

6.见过最强的后台管理系统

芋道&#xff0c;以开发者为中心&#xff0c;打造中国第一流的快速开发平台&#xff0c;全部开源&#xff0c;个人与企业可 100% 免费使用。 架构图 管理后台的 Vue3 版本采用 vue-element-plus-admin &#xff0c;Vue2 版本采用 vue-element-admin 管理后台的移动端采用 uni-…

虹科方案 | 医药行业专用ECOLOG即插即用室内和设施环境监控系统

虹科ELPRO ECOLOG Plug&Play 连续监测解决方案采用功能强大的新ECOLOG-PRO硬件模块和ECOLOG-PRO Base服务器解决方案。即插即用是虹科ELPRO室内和设施环境监测解决方案增强型系列的一部分。ECOLOG即插即用是一种多功能&#xff0c;经济的系统&#xff0c;专为需要监测少于5…

转换流:代码与文件编码不一致读取乱码的问题

字符输入转换流&#xff1a;package com.gao;import java.io.*;public class transfer_stream {public static void main(String[] args) throws Exception {InputStream in new FileInputStream("E:\\黑马教育\\demo.txt");Reader re new InputStreamReader(in,&q…

Postman(07)Postman+OMySQL操作数据库

一、本文解决的问题 ● Postman断言需要查询数据存储情况&#xff1b; ● 部分业务需要从数据库中获取验证码&#xff08;例如登录&#xff09;&#xff1b; ● 自动化场景需要执行数据正确性比对。 二、OMySQL连接数据库 1、OMySQL安装与启动 1.1 安装node.js 这个百度一…

【windows】VMware Workstation 不可恢复错误:(vmui) 错误代码0xc0000094

【问题描述】 打开需要启动的虚拟机后&#xff0c; 修改设备参数的时候&#xff0c;提示&#xff1a; VMware Workstation 不可恢复错误: (wmui) Exception 0xc0000094 has occurred。 【解决方法】 由于搭建的虚拟机环境一直在使用&#xff0c; 后来发现是VMware升级到17.0后…

【回眸】牛客网刷刷刷(三) Linux(续)软件工程(专题)

前言 近期的牛客网学习内容有Linux专题&#xff0c;以下记录一些笔试题中的Linux的知识点。 知识点 -u 用户号 指定用户的用户号&#xff1b;因为系统用户的用户号为 0&#xff0c;故指定用户号为 0&#xff1b; 如果同时有 -o 选项&#xff0c;则可以重复使用其他用户的标识…

马来酰亚胺-二硫键-活性酯;MAL-SS-NHS结构式

英 文 &#xff1a;MAL-SS-NHS 中文&#xff1a;马来酰亚胺-双硫键-活性酯 存储条件&#xff1a;-20C&#xff0c;避光&#xff0c;避湿 用 途&#xff1a;仅供科研实验使用&#xff0c;不用于诊治 外观: 固体或粘性液体&#xff0c;取决于分子量 注意事项&#xff1a;取用…

【机器学习】逻辑回归(理论)

逻辑回归&#xff08;理论&#xff09; 目录一、概论1、何为逻辑回归2、映射函数的引入3、伯努利分布二、损失函数的推导三、用逻辑回归实现多分类1、间接法&#xff1a;HardMax2、直接法&#xff1a;SoftMaxⅠ SoftMax的引入Ⅱ SoftMax的计算Ⅲ 引入SoftMax后的损失函数&#…

声网许振明:RTC 场景 UHD 视频应用和探索

大家好&#xff0c;我是声网的视频工程师许振明&#xff0c;今天跟大家主要介绍一下声网在 RTC 场景 UHD 视频的应用和探索。主要基于声网 HFR 和 VDR 两个系统来展开分享。 随着 RTC 技术的发展和应用&#xff0c;越来越多的场景都需要接入 RTC 的能力。尤其是随着编码技术、…

【Linux】Ubuntu20.04.5安装ROS1【教程】

文章目录【Linux】Ubuntu20.04.5安装ROS1【教程】写在前面&#xff0c;一些特别注意的点安装步骤大纲1.选择软件镜像源&#xff08;可以省略&#xff0c;如果不成功再试这一步&#xff09;2.添加ROS软件源和密钥3.安装ROS14.设置环境变量5.安装rosinstall6.检查安装是否成功Ref…

基于uds和modbus协议的bootloader对比

2022年参与了两个bootloader项目的开发&#xff0c;两个项目使用的芯片、通讯驱动不同&#xff0c;因此传输协议也不同&#xff0c;年底了将两个项目做一个对比&#xff0c;也顺便加深下对bootloader的理解。相同点&#xff1a;modbusuds刷新流程刷新流程大同小异&#xff0c;简…

活动星投票技能创意大赛网络评选微信的投票方式线上免费投票

“技能创意大赛”网络评选投票_建立投票链接_作品投票小程序_扫码投票制作方法现在来说&#xff0c;公司、企业、学校更多的想借助短视频推广自己。通过微信投票小程序&#xff0c;网友们就可以通过手机拍视频上传视频参加活动&#xff0c;而短视频微信投票评选活动既可以给用户…

C语言详解——自定义类型:结构体、枚举、联合体

&#x1f307;个人主页&#xff1a;平凡的小苏 &#x1f4da;学习格言&#xff1a;别人可以拷贝我的模式&#xff0c;但不能拷贝我不断往前的激情 &#x1f6f8;C语言专栏&#xff1a;https://blog.csdn.net/vhhhbb/category_12174730.html 小苏希望大家能从这篇文章中收获到许…

【Pytorch】稀疏矩阵的表示与加减运算

前提知识&#xff1a;LongTensor()是64位整数型向量&#xff0c;FloatTensor()是32位浮点数向量。 有大量0元素的时候&#xff0c;我们可以使用坐标形式存储稀疏矩阵。 一个3*3的矩阵&#xff0c;但是只有坐标&#xff08;0,0&#xff09;处有值&#xff08;值为1&#xff09;…

量子计算(二十二):Grover算法

文章目录 Grover算法 一、什么是搜索算法 二、怎么实现Grover搜索算法 Grover算法 一、什么是搜索算法 举一个简单的例子&#xff0c;在下班的高峰期&#xff0c;要从公司回到家里&#xff0c;开车走怎样的路线才能够耗时最短呢&#xff1f;最简单的想法&#xff0c;当然…

Radius vector (半径矢量)

Radius vector引言定义引言 今天给大家介绍一下什么是Radius vector。 定义 从圆心到当前位置的矢量r⃗\vec{r}r。它也被叫做位置向量。 其中&#xff0c;O表示圆心&#xff0c;这里我们称之为原点位置&#xff0c;A表示当前位置。因此矢量OA⃗\vec{OA}OA是一个Radius vec…

VsCode简单使用,配置c/c++编译环境,个人感受

整体感觉 本质就是一个加强的文本编译器&#xff0c;增加了终端和控制台&#xff0c;可以程序交互&#xff0c;相当于一个IDE的外部框架。和sublime有一定相似性&#xff0c;但界面和插件安装方面远远优于sublime。应该说这是一种为编译语言设计的显示框架&#xff0c;真正起作…

代码随想录算法训练营第二十天 二叉树 java : 654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树

LeetCode 654.最大二叉树 题目讲解 思路 二叉树的根是最大值左子树最大值左边部分构造的最大二叉树右子树最大值是右边部分构造的最大二叉树 AC代码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode ri…

可视化监控告警-grafana

需求背景 根据我们的业务背景&#xff0c;需要监控3个纬度。 Iaas层&#xff1a;即腾讯云的基础设施CVMPaas层&#xff1a;即使用的腾讯云Paas服务&#xff0c;各种中间件Saas层&#xff1a;即我们本身的服务指标监控。 腾讯云监控&#xff0c;可以覆盖1&#xff0c;2场景, …