代码随线录刷题|LeetCode 392.判断子序列 115.不同的子序列

news2024/11/24 11:33:52

目录

392.判断子序列

思路

1、确定dp数组

2、确定递推公式

3、初始化dp数组

4、遍历顺序

判断子序列

动态规划

双指针

115.不同的子序列

思路

1、确定dp数组

2、确定递推公式

3、初始化dp数组

4、遍历顺序

不同的子序列


392.判断子序列

题目链接:力扣

思路

        比较简单的思路就是使用双指针来判断子序列,这里主要使用动态规划,是编辑距离的入门题目

1、确定dp数组

        dp[i][j] 表示以下标i-1为结尾的字符串s,和以下标j-1为结尾的字符串t,相同子序列的长度为dp[i][j]

2、确定递推公式

有两种情况:

  • if (s[i - 1] == t[j - 1])
    • t中找到了一个字符在s中也出现了。dp[i][j] = dp[i - 1][j - 1] + 1;,因为找到了一个相同的字符,相同子序列长度自然要在dp[i-1][j-1]的基础上加1
  • if (s[i - 1] != t[j - 1])
    • 此时相当于t要删除元素,t如果把当前元素t[j - 1]删除,那么dp[i][j] 的数值就是 看s[i - 1]与 t[j - 2]的比较结果了,即:dp[i][j] = dp[i][j - 1];

动态动画推导视频推荐:判断子序列

3、初始化dp数组

        从递推公式可以看出dp[i][j]都是依赖于dp[i - 1][j - 1] 和 dp[i][j - 1],所以dp[0][0]和dp[i][0]是一定要初始化的

4、遍历顺序

        从前向后进行遍历 

判断子序列

动态规划

class Solution {
    public boolean isSubsequence(String s, String t) {
        int slen = s.length();
        int tlen = t.length();

        // 创建dp数组
        int[][] dp = new int[slen+1][tlen+1];

        // 推导dp数组
        for (int i = 1; i <= slen; i++) {
            for (int j = 1; j <= tlen; j++) {
                if (s.charAt(i-1) == t.charAt(j-1)) {
                    dp[i][j] = dp[i-1][j-1] + 1;
                } else {
                    dp[i][j] = dp[i][j-1];
                }
            }
        }

        // 获取结果
        if (dp[slen][tlen] == slen) {
            return true;
        } else {
            return false;
        }
    }
}

双指针

class Solution {
    public boolean isSubsequence(String s, String t) {

        int sindex = 0;
        int tindex = 0;

        while (sindex < s.length() && tindex < t.length()) {
            if (s.charAt(sindex) == t.charAt(tindex)) {
                sindex++;
            }
            tindex++;
        }

        return sindex == s.length();
    }
}

115.不同的子序列

题目链接:力扣

思路

反正不是很好理解,再多看几次吧

1、确定dp数组

dp[i][j]:以i-1为结尾的s子序列中出现以j-1为结尾的t的个数为dp[i][j]

2、确定递推公式

有两种情况:

  • s[i - 1] 与 t[j - 1]相等
    • 当s[i - 1] 与 t[j - 1]相等时,dp[i][j]可以有两部分组成
      dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j]
  • s[i - 1] 与 t[j - 1] 不相等
    • 当s[i - 1] 与 t[j - 1]不相等时,dp[i][j]只有一部分组成
      dp[i][j] = dp[i - 1][j]

3、初始化dp数组

        根据递推公式,要初始化dp[i][0] 和 dp[0][j],以及特殊的dp[0][0]

dp[i][0] 表示:以i-1为结尾的s可以随便删除元素,出现空字符串的个数,所以都是1

dp[0][j] 表示:空字符串s可以随便删除元素,出现以j-1为结尾的字符串t的个数,所以都是0

dp[0][0] 应该是1,空字符串s,可以删除0个元素,变成空字符串t

4、遍历顺序

        从上到下,从左到右

不同的子序列

class Solution {
    public int numDistinct(String s, String t) {
        int slen = s.length();
        int tlen = t.length();

        // 创建dp数组
        int[][] dp = new int[slen+1][tlen+1];

        // 初始化dp数组
        for (int i = 0; i < slen + 1; i++) {
            dp[i][0] = 1;
        }

        for (int i = 1; i <= slen; i++) {
            for (int j = 1; j <= tlen; 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[slen][tlen];
    }
}

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

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

相关文章

【Exception】 Java Lambda List转换Map报错 触发异常 IllegalStateException: Duplicate key

【Exception】 Java Lambda List转换Map报错 触发异常 IllegalStateException: Duplicate key 一、问题描述 在使用Java8 lambda 将List转换为Map时&#xff0c;遇到报错&#xff1a;IllegalStateException- Duplicate key .... 具体报错信息如下&#xff1a; java.lang.Illega…

基于Dockerfile创建镜像

目录 一、Docker镜像的创建 1 基于现有镜像创建 2 基于本地模板创建 3 基于Dockerfile 创建 3.1 联合文件系统(UnionFS ) 3.2 镜像加载原理 二、Dockerfile 操作命令的指令 1 FROM 镜像 2 MAINTAINER 名字 3 RUN 命令 4 ENTRYPOINT 5 CMD ENTRYPOINT和CMD的区别&…

HTML网页设计【足球科普】学生DW静态网页设计

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

【openWrt】设置执行定时任务

遇到一个问题&#xff0c;使用openWrt软路由搭建服务器&#xff0c;在docker装了一个maccmsV10&#xff0c;需要每天执行cj信息定时任务&#xff0c;但是maccmsV10本身不支持执行定时任务的配置的。 看了下&#xff0c;openWrt是支持本身是linux系统&#xff0c;所以是可以设…

糟糕,数据库异常不可用怎么办?

摘要&#xff1a;糟糕&#xff0c;数据库异常不可用怎么办&#xff1f;挺着急的&#xff0c;在线等。本文分享自华为云社区《糟糕&#xff0c;数据库异常不可用怎么办&#xff1f;》&#xff0c;作者&#xff1a;GaussDB 数据库。 随着数字化转型的加速&#xff0c;数据量爆发…

获取鼠标在画布中的位置

获取鼠标在画布中的位置 效果展示 概述 本文讲解如何实现我们平时用的画布软件中&#xff0c;怎么获取的我们鼠标时刻在画布中的位置。 构建HTML框架 <body><div class"box"></div> </body>CSS样式 <style>.box {/* 设置盒子…

IDEA 2022.3 发布,终于支持 redis 了

IntelliJ IDEA 发布了最新2022.3版本&#xff0c;本次更新&#xff1a;可以通过设置切换到新 UI&#xff0c;即可预览焕然一新的 IDE 外观。引入了一个新的 Settings Sync&#xff08;设置同步&#xff09;解决方案&#xff0c;用于同步和备份自定义用户设置。此外&#xff0c;…

私域运营对于企业的重要性

企业进行私域流量的精细化运营&#xff0c;不仅可以打造属于企业自己的社群王国&#xff0c;还可以挖掘存量客户的价值&#xff0c;实现更智能的客户管理和个性化运营方案。 前言 相信每个人都对瑞幸咖啡略有耳闻&#xff0c;这个国产咖啡品牌曾一度被封神&#xff0c;但随着财…

【leetcode】2404. 出现最频繁的偶数元素(js实现)

1. 题目 2404. 出现最频繁的偶数元素 2. 思路 创建哈希表&#xff0c;统计偶数的出现次数将哈希表转换成数组&#xff0c;遍历哈希表&#xff0c;设置res的初始值为[-1&#xff0c;0]&#xff0c;第一个值为偶数值&#xff0c;第二个值为这个偶数出现的次数&#xff1b;如果…

探花交友_第3章_完善个人信息(新版)

探花交友_第3章_完善个人信息(新版) 文章目录探花交友_第3章_完善个人信息(新版)课程介绍1. 完善用户信息1.1 阿里云OSS1.1.1 概述1.1.2 账号申请购买服务创建Bucket1.1.3 抽取模板工具OssPropertiesOssTemplateTanhuaAutoConfiguration1.1.4 测试1.2 百度人脸识别1.2.1 概述1.…

PyCharm+PyQT5之四第二个QT程序

前面程序实现了逻辑分离&#xff0c;第二个QT程序将建立控件之间的关联&#xff0c;并自行撰写&#xff0c;事件。 首先&#xff0c;建立只有一个按钮的界面 点击工具栏编辑信号与槽&#xff0c;按钮带有红框并拖拽&#xff0c;这样间建立了按钮与dialog的槽信号。 按钮一般是…

【OpenCV学习】第7课:形态学操作-膨胀与腐蚀

仅自学做笔记用,后续有错误会更改 理论 图像形态学操作-基于形状的一系列图像处理操作的合集, 主要是基于集合论基础上的形态学数学形态学有4个基本操作:膨胀丶腐蚀丶开丶闭膨胀与腐蚀是图像处理中最常用的形态学操作手段 形态学操作(morphology operators)-膨胀 跟前边的卷…

行者AI解析内容审核平台中的图像检测技术原理

本文首发&#xff1a;行者AI谛听 近些年&#xff0c;监管部分对于平台的信息方面&#xff0c;越来越严格&#xff0c;继而有很多企业选择智能AI内容审核服务&#xff0c;帮助企业快速处理平台上一些违规内容。 很多人不懂这方面到底属于什么&#xff0c;今天行者AI就来为大家解…

【Python】python入门,这一篇就够了

快速入门/一文免挂Python程序元素变量python中的符号Python的程序结构分支结构异常处理循环结构Python函数python中的可变参数python中的全局变量和局部变量组合数据类型之序列类型序列通用操作字符串&#xff08;str&#xff09;字符串常用函数字符串类型的格式化列表&#xf…

Qt第三十一章:渐变QGradient

线性渐变&#xff1a;QLinearGradient class TestGradient(QWidget):def __init__(self, parentNone):super(TestGradient, self).__init__(parent)self.resize(300, 300)label QLabel(self)label.setGeometry(0, 0, 300, 300)"""线形渐变"""la…

802.11基础——术语及缩略语

目录 WiFi LAN&#xff08;局域网&#xff09; WAN&#xff08;广域网&#xff09; WLAN&#xff08;Wireless LAN&#xff0c;即无线局域网&#xff09; AP&#xff08;Access point的简称&#xff0c;即访问点&#xff0c;接入点&#xff09; Station&#xff08;工作站…

HTML期末学生大作业 基于HTML+CSS+JavaScript通用的后台管理系统ui框架模板

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

[附源码]Python计算机毕业设计Django线上评分分享平台

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Docker安装MoogoDB, 进入容器, mongo shell操作mongoDB

安装MoogoDB, 进入容器, mongo shell操作mongoDB [Docker-Compose方式、普通方式] 文章目录安装MoogoDB, 进入容器, mongo shell操作mongoDB[Docker-Compose方式、普通方式]附件&#xff1a;单词本附件&#xff1a;什么是 . yml 后缀文件 ?[ 普通方式 ]1. 下载镜像:* 拓展&am…

职场中,如何让“讨厌的人”配合自己工作?

在职场上&#xff0c;我们总会遇到那么几个不愿意配合你工作的人&#xff0c;不仅不配合&#xff0c;甚至还喜欢扯皮&#xff0c;推卸责任&#xff0c;甩锅给自己的队友。然而&#xff0c;我们也不可能因为工作中出现了这样一个或几个人&#xff0c;就离职不干&#xff0c;或者…