【二分查找-简单】392. 判断子序列(三种方法)

Leetcode——判断子序列 / 判断子串 / 找子序列 / 找子串 1. 判断子序列 (1)双指针 使用两个指针分别指向两个字符串的起始索引,每次循环判断两个指针指向的字符是否相等,相等则两个指针向右移动,不相等则只移动 s 的指针。最后如果 t 指针移动到末尾,则 t 是为 s 的子序列。 class Solution { public boolean isSubsequence(String t, String s) { int indext = 0, indexs = 0; while (indext < t.leng 阅读详情

【题目】
给定字符串 s 和 t ,判断 s 是否为 t 的子序列。
字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)
【进阶】
如果有大量输入的 S,称作 S1, S2, … , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码?
【示例 1】
输入:s = “abc”, t = “ahbgdc”
输出:true
【示例 2】
输入:s = “axc”, t = “ahbgdc”
输出:false
【提示】
0 <= s.length <= 100
0 <= t.length <= 10^4
两个字符串都只由小写字符组成。
【代码】
【Python】
在这里插入图片描述

class Solution:
    def isSubsequence(self, s: str, t: str) -> bool:
        pos=-1`在这里插入代码片`
        for x in s:
            pos=t.find(x,pos+1)
            if pos==-1:
                return False
        return True            

【方法2】
在这里插入图片描述

class Solution:
    def isSubsequence(self, s: str, t: str) -> bool:
        pos=-1
        for x in s:
            flag=1
            for i in range(pos+1,len(t)):
                if t[i]==x:
                    flag=0
                    pos=i
                    break
            if flag:
                return False
        return True            

【方法3】
在这里插入图片描述

class Solution:
    def isSubsequence(self, s: str, t: str) -> bool:
        n, m = len(s), len(t)
        f = [[0] * 26 for _ in range(m)]
        f.append([m] * 26)

        for i in range(m - 1, -1, -1):
            for j in range(26):
                f[i][j] = i if ord(t[i]) == j + ord('a') else f[i + 1][j]
        
        add = 0
        for i in range(n):
            if f[add][ord(s[i]) - ord('a')] == m:
                return False
            add = f[add][ord(s[i]) - ord('a')] + 1
        
        return True
子序列判断算法:双指针与预处理优化详解 子序列判断是字符串处理中的基础算法问题,其核心在于验证一个字符串是否可以通过删除另一字符串中的部分字符得到。从算法原理来看,双指针法通过线性扫描实现O(n)时间复杂度的高效匹配,而预处理优化则利用二分查找将多次查询的时间复杂度降至O(mlogn)。这些技术在文本搜索、生物信息学等场景具有重要应用价值,特别是在处理海量数据时,预处理建立的字符位置索引能显著提升LeetCode 392等问题的求解效率。实际工程中需要根据查询频率和数据规模,在双指针、二分查找和跳跃指针等方案间做出权衡选择。 阅读详情

相关推荐

OpenWRT端口转发与NAT环回冲突的排查与解决

本文详细解析了OpenWRT路由器中端口转发与NAT环回功能冲突导致的内网访问故障。通过生活化类比阐明两者工作原理,提供从基础诊断到内核参数调整、LuCI选项配置及手动编写iptables规则的多套解决方案,并给出进阶排查思路,帮助用户彻底解决内网无法通过公网地址访问服务的常见问题。

weixin_29243279的博客 508

判断子序列的三种方法

判断子序列的三种方法及推广

weixin_41636858的博客 2711

CentOS 7下rsyslog日志服务器搭建全攻略:从安装到避坑

本文详细介绍了在CentOS 7系统上搭建rsyslog日志服务器的完整流程,从基础安装到高级配置,包括协议设置、日志模板设计、安全加固和性能优化。特别分享了生产环境中的实战技巧和常见问题解决方案,帮助用户高效构建可靠的日志管理系统。

happy2的博客 688

判断子序列

问题描述 给定字符串s和t,判断s是否为t的子序列? 解法1:双指针法 思路很简单,设计两个指针,分别用以遍历母字符串t和子字符串t.每一次遍历到子字符串的某个元素,开始遍历母字符串,直到母字符串也有相同的元素对应,这之后指向两个字符串的指针分别自增1.再进行如上判断.直到对于子串的某个元素母串没有对应的匹配或者子串遍历完毕为止. 原理很简单,在此就不贴代码了(其实我也没写哈哈) 解法2.动态规划法 其实动态规划法特别适合求这种判断子串子序列的问题,之前的博客中曾经具体讨论过求两个字符串的公共子串和公

weixin_43712228的博客 1778

Ubuntu18.04 SoftRoCE安装教程

目标:创建两台Ubuntu18.04虚拟机,安装SoftRoCE环境,一台作为Server,一台作为Client,模拟RDMA通信环境,熟悉RDMA的通信方式。

GGGYL111的博客 1551

从零构建:用Simulink搭建固定翼无人机六自由度模型的避坑指南

本文详细介绍了使用Simulink从零构建固定翼无人机六自由度动力学模型的完整流程和避坑指南。重点解析了模型架构设计、气动力计算、参数配置、仿真求解器选择等关键环节的常见问题与解决方案,帮助开发者快速建立准确可靠的无人机控制系统仿真模型。

hhh00的博客 1003

LeetCode 392. 判断子序列

题目 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。 进阶: 如果有大量输入的 S,称作 S1, S2, … , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码? 致谢: 特别感谢 @pbrother 添加此问题并且创建所有测试用例。 示例 1: 输入:s = “abc”

午夜的行人 415

5、硬件工程师笔试面试——上拉电阻、下拉电阻(2025版本)

本文系统介绍了上拉电阻和下拉电阻的原理与应用。上拉电阻通过连接电源确保电路高电平状态,常用于数字电路防抖、OC门驱动等场景;下拉电阻连接地线维持低电平,适用于低电平触发电路。文章详细分析了两种电阻的选择方法、功耗与响应速度的平衡策略,以及在高速信号传输中的影响差异。同时对比了二者的优缺点,并提供了模拟电路中的应用实例。最后给出了电阻值计算的工程方法,为硬件工程师的电路设计提供了实用参考。

XU157303764的博客 2873

392.判断子序列

如果有大量输入的 S,称作 S1, S2, ... , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。如果有大量输入的 S,称作 S1, S2, ... , Sk 其中 k >= 10亿,可以使用动态规划或二分查找法来预处理t。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。的对应字符索引列表中查找大于上一个找到索引的位置。函数接受一个字符的索引列表和上一个找到的索引。并继续检查下一个字符。,我们首先复制下一个位置的值,然后更新。

m0_75184481的博客 1541

【原创】下载RealEstate10K数据集原始视频的方法

目前互联网上能搜到下载RealEstate10K数据集原始视频的方法都已经不能用了,这篇博客介绍一种目前可用的下载RealEstate10K数据集原始视频的方法,并给出自动化的脚本代码。

沉迷单车的追风少年 2465

SerDes系列之FFE均衡技术

FFE的基本结构可以在RX侧或TX侧实现,其基本工作原理相同:它通过从同一信号源应用适当的延迟来产生多径信号,然后对它们进行线性缩放和组合以消除信道ISI。

一只豌豆象的博客 4247

力扣392.判断子序列

随后就是解决一下顺序问题,已经用过的字符位置,其实就相当于被“删掉”了,后面的字符不可能再用。很自然的,我们就可以这么想:我要去 t 里面“找 s 的每一个字符”,而且要“按顺序找”。把这个过程抽象成代码,就是:在 t 上维护一个“当前看到哪儿了”的位置,它一直往右走,从不往回调。这样写出来,就变成了“双指针”的形式了,只不过两个“指针”其实就是两个下标:一个指向 s(i),一个指向 t(j)。于是我们就得到了这道题的解法,使用指针。的查询,甚至达到了十亿的量级,我们就会发现,好像双指针效率太低了。

m0_71641460的博客 1376

AE 与 ISP 参数联动机制解析:自动曝光系统与图像信号处理模块协同设计实践

AE(自动曝光)并不是一个独立的图像控制模块,而是与 ISP(Image Signal Processor)深度耦合运作的系统协同体。其输出的曝光参数直接决定了图像处理链路中 Gamma 曲线选择、黑电平补偿、去噪级别、边缘增强等一系列关键参数的取值。本文基于主流平台(如高通、MTK、海思)的工程实战经验,详细剖析 AE 与 ISP 在曝光驱动、调节优先级、图像还原逻辑等环节的联动机制,并结合拍照与视频等不同场景,给出可落地的联调方法。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1528

LeetCode392_判断子序列

双指针、动态规划

Haolin_Liu的博客 607

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

leetcode 392. 判断子序列

解题思路:遍历子序列,如果相等,子序列和主序列都同时向后移动,如果不相等,主序列移动,子序列不移动.如果到达主序列的末尾,返回false,其他返回true. 时间复杂度O(n) public static void main(String[] args) { int a[] = {1,3,4,2}; int b[] = {1,2,4,3,1,4,6,5}; ...

厚积薄发的博客 1513

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

LeetCode 392 判断子序列

在字符串的日常处理场景里,判断一个字符串是不是另一个字符串的子序列是非常常见的需求。比如在搜索推荐里,我们输入一个简写,系统要判断这个简写是不是某个候选词的子序列,从而决定是否推荐。LeetCode 392 就是这样一道题:给定两个字符串 s 和 t,判断 s 是否为 t 的子序列。 本文会从题目分析、解题思路、Swift 实现代码到示例测试,带大家完整拆解这道题,并结合进阶问题聊聊在大规模数据场景下的优化思路。

记录从移动端、鸿蒙到物联网与AI的完整实战与思考。专注于分享可复用的工程方案与产品思维,尤其深入鸿蒙生态与全栈开发。以十年工程与管理沉淀,为你提供清晰的技术纵深路径。坚信技术的价值在于“贯通”与“落地”。 1217

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Java实现 LeetCode 392 判断子序列

392. 判断子序列 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。 ...

南 墙 1万+

【简单】力扣算法题解析LeetCode392:判断子序列

LeetCode 392题要求判断字符串s是否为t的子序列(字符顺序一致,可不连续)。采用双指针法:指针i遍历s,j遍历t,匹配成功则移动i,最终若i遍历完s则返回true。时间复杂度O(n),空间复杂度O(1)。核心代码通过单次遍历t完成匹配,处理边界条件如空字符串或s长度大于t时直接返回。典型用例包括完全匹配(s="abc", t="ahbgdc"→true)和部分缺失(s="axc"→false)。

ylumwd的博客 966

LeetCode 392. 判断子序列(双指针&二分查找)

1. 题目 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。 示例 1:...

Michael是个半路程序员 1235

Leetcode392. 判断子序列(C语言)

Leetcode392. 判断子序列(C语言) 算法-贪心思想:算法与数据结构参考 题目: 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。例: 输入:s = “abc” t = “ahbgdc” 输出:true 思路: 贪心思想,依次遍历比较。 代码: bool isSubseque...

jeanlu的博客 1005

leetcode(DP)--392. 判断子序列

leetcode(DP)–392. 判断子序列 1,题目: 2,思路: 方法一:动态规划: 思路: 状态:dp[i][j]为s的从头开始到i的子字符串是否为t从头开始到j的子字符串的子序列 状态转移公式: 1、当char[i]==char[j]时,则字符i一定是j的子序列,如果0i-1子字符串是0j-1子字符串的子序列,则dp[i][j]=true,所以dp[i][j]= dp[i-1][j-1]; 2、当char[i]!=char[j]时,即判断当前0i子字符串是否是0j-1的子字符串的子序列,即dp

chen772209的博客 251

392. 判断子序列

综上所述,该方法使用动态规划的思想来判断一个字符串是否为另一个字符串的子序列,通过填充二维数组。,用于判断字符串’s’是否为字符串’t’的子序列。代码中使用了动态规划的方法,通过构建一个二维数组。这段代码是一个Java类,其中包含了一个方法。来记录匹配情况,最终返回判断结果。

Wzideng@qq.com 456

算法打卡day47|动态规划篇15| Leetcode 392.判断子序列、115.不同的子序列

JAVA算法|动态规划篇15| Leetcode 392.判断子序列、115.不同的子序列

改变从现在开始 1259

Leetcode 392. 判断子序列

遍历 t ,当 t 对应的字符和 s对应的指针字符相同时,指针后移。如果指针的长度和 s 长度相同时,即指向了 s 的后一位,则说明 s 为 t 的子序列,返回 True。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。1.求出 s 的长度,如果 s 的长度大于 t 的长度,返回 False。如果 s 的长度等于 0,返回 True。3.如果 t 遍历结束后,指针的长度还和 s 长度不相等,则说明 s 不是 t 的子序列,返回 False。

li_yizhixiaowukong的博客 925
上一篇: 【二分查找-简单】704. 二分查找
下一篇: 【栈-简单】1143. 最长公共子序列
菜菜2022
博客等级 码龄9年 67粉丝 1033原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值