Leetcode 判断子序列

在这里插入图片描述

通过双指针来判断字符串s是否是字符串t的子序列。

算法思想:

  1. 双指针法

    • 我们使用两个指针ij分别遍历字符串st
    • 初始时,i指向s的第一个字符,j指向t的第一个字符。
  2. 匹配字符

    • 每次比较s[i]t[j]
      • 如果s[i] == t[j],说明s当前字符与t当前字符匹配,接下来可以继续匹配s的下一个字符,所以指针i右移。
      • 不论是否匹配成功,指针j都会右移,因为需要继续在t中查找。
  3. 判断结果

    • 循环结束后,我们检查i是否等于s的长度(i == s.length())。如果i等于s的长度,说明s的所有字符都能在t中按顺序找到,st的子序列,返回true。否则返回false

代码解读:

class Solution {public boolean isSubsequence(String s, String t) {int sLen = s.length(), tLen = t.length();  // 获取字符串 s 和 t 的长度int i = 0, j = 0;  // 初始化双指针,i 指向 s 的第一个字符,j 指向 t 的第一个字符// 当 i 小于 s 的长度 且 j 小于 t 的长度时进行遍历while (i < sLen && j < tLen) {if (s.charAt(i) == t.charAt(j)) {  // 如果 s[i] == t[j],则匹配,i 右移i++;}j++;  // j 每次都右移,遍历 t}// 如果 i == s 的长度,说明 s 的所有字符都按顺序匹配到了 t 中return i == sLen;}
}

复杂度分析:

  • 时间复杂度: O(n),其中 n 是字符串 t 的长度。因为我们只需遍历一次 t
  • 空间复杂度: O(1),只用了常量级别的额外空间来存储指针。

总结:这个算法通过双指针逐步在t中匹配s的字符,如果i能够遍历完s,则说明st的子序列。

为什么使用while循环而不是for循环?

在这个问题中,使用while循环而不是for循环的原因主要是因为我们需要两个指针(ij)来分别遍历两个不同的字符串(st),并且它们的移动并不是严格同步的。具体来说,ij 的移动取决于匹配条件,因此使用 while 循环更直观和灵活。

具体原因如下:

  1. 两个指针的独立性

    • ij 这两个指针的移动是独立的。只有当 s[i] == t[j] 时,i 才会移动,而 j 每次都要移动。因此,两个指针的移动节奏不一样,而 while 循环允许我们灵活地控制指针移动的逻辑。
    • 如果用 for 循环的话,通常是在一个固定范围内逐个递增,比较适合单个序列的遍历,而不太方便这种条件控制的多序列匹配。
  2. 终止条件的灵活性

    • while 循环的终止条件可以是两个字符串长度中的较大者。我们只要确保在 i < s.length()j < t.length() 的范围内操作即可。只要有一个条件不满足,就可以退出循环。这样的控制对于不同的字符串长度非常合适。
    • 如果用 for 循环,虽然也可以实现,但写法上会比较冗长,比如需要分别写两个嵌套的循环或者额外的判断条件,增加了代码的复杂度。
  3. 代码可读性

    • while 循环更自然地表达了“当两个字符串都没有遍历完时,继续匹配”的逻辑。它更加直观地反映了我们对字符匹配的意图,即逐个对比字符,遇到匹配的就移动 i,无论是否匹配都要移动 j,直到遍历结束。
    • for 循环一般用于每次都需要固定增加步数的场景,但在这里,我们不需要 ij 同时增加,这让 while 循环更容易理解。

for 循环的实现:

虽然使用 while 循环更加直观,但实际上也可以使用 for 循环实现类似逻辑。示例如下:

class Solution {public boolean isSubsequence(String s, String t) {int sLen = s.length();int j = 0;  // 只需要为 t 使用 for 循环,s 由条件控制for (int i = 0; i < t.length() && j < sLen; i++) {if (t.charAt(i) == s.charAt(j)) {j++;  // 如果匹配,移动 s 的指针 j}}return j == sLen;  // 判断是否 s 的所有字符都匹配}
}

总结:

  • while 循环 更加适合这个场景,因为它能够灵活控制两个指针的移动和终止条件,代码简洁易读。
  • for 循环 也可以实现相同的功能,但写起来相对不太直观,代码逻辑上可能会稍微复杂一些。

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

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

相关文章

大模型撬动数据新质生产力,我们重新解构了智能BI

大模型撬动数据新质生产力&#xff0c; 我们重新解构了智能BI 作者 | 曾响铃 文 | 响铃说&#xff08;xiangling0815&#xff09; “超级人工智能将在‘几千天内’降临。” 最近&#xff0c;OpenAI 公司 CEO 山姆奥特曼在社交媒体罕见发表长文&#xff0c;预言了这一点。之前…

web前端-----html5----用户注册

以改图为例 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>用户注册</title> </hea…

IC验证面试中常问知识点总结(五)附带详细回答!!!

13、phase相关 13.1 phase列表及分类 task phase: 耗费仿真时间,如run phase;给DUT施加激励、监测DUT的输出都是在这些phase中完成的。 function phase:如build_phase、connect_phase等,这些phase都不耗费仿真时间。 13.2 为什么引入动态运行phase(12个小phase)? 为了…

JNA调用c++动态库返回数据

jna学习网站 JNA Examples 1、返回String, pch.h头文件 // pch.h: 这是预编译标头文件。 // 下方列出的文件仅编译一次&#xff0c;提高了将来生成的生成性能。 // 这还将影响 IntelliSense 性能&#xff0c;包括代码完成和许多代码浏览功能。 // 但是&#xff0c;如果此处…

docker harbor

文章目录 一&#xff0c;搭建私有仓库1.1下载registry1.2在 daemon.json 中添加私有镜像仓库地址1.3重新加载重启docker1.4运行容器1.5拉取一个centos7镜像1.6给镜像加标签1.7上传镜像1.8显示私有仓库的所有镜像1.8查看私有仓库的 centos 镜像有哪些tag 二&#xff0c;什么是ho…

SVN——常见问题

基本操作 检出 提交 更新 显示日志 撤销本地修改 撤销已提交内容 恢复到指定版本 添加忽略 修改同一行 修改二进制文件

个人博客搭建 | Hexo框架

文章目录 1.Hexo安装2.创建博客3.将博客通过GitHub来部署4.更换主题 1.Hexo安装 Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown&#xff08;或其他标记语言&#xff09;解析文章&#xff0c;在几秒内&#xff0c;即可利用靓丽的主题生成静态网页。搭建Hexo首先要…

spring boot itext7 修改生成文档的作者、制作者、标题,并且读取相关的信息。

1、官方的example文件&#xff1a;iText GitHub itext-java-7.2.5\kernel\src\test\java\com\itextpdf\kernel\pdf\PdfStampingTest.java 2、修改代码&#xff1a; Testpublic void stamping1() throws IOException {String filename1 destinationFolder "stamping1_…

期货考核系统部署/配资net源码

关于期货考核系统部署与配资NET源码的问题&#xff0c;以下是一些相关的信息和建议&#xff1a; 一、期货考核系统部署 期货考核系统的部署是一个复杂的过程&#xff0c;涉及需求分析、系统设计、开发、测试、部署等多个环节。以下是一些关键步骤&#xff1a; 需求分析&…

如何替换OCP节点(二):使用 antman脚本 | OceanBase应用实践

前言&#xff1a; OceanBase Cloud Platform&#xff08;简称OCP&#xff09;&#xff0c;是 OceanBase数据库的专属企业级数据库管理平台。 在实际生产环境中&#xff0c;OCP的安装通常是第一步&#xff0c;先搭建OCP平台&#xff0c;进而依赖OCP来创建、管理和监控我们的生…

营销邮件软件:提升邮件营销效率必备工具!

营销邮件软件选择技巧&#xff1f;免费高效的邮件营销软件推荐&#xff1f; 如何高效地管理和优化邮件营销活动成为了企业面临的一大挑战。营销邮件软件成为提升邮件营销效率的必备工具。MailBing将深入探讨营销邮件软件的功能、优势以及如何选择合适的工具。 营销邮件软件&a…

element checkbox选框和文字分开点击---更改一列checkbox的顺序(进阶版)

选框和文字分开点击&#xff0c;找了很多&#xff0c;没有我想要的效果&#xff0c;但也借鉴了一下&#xff0c;实现了&#xff0c;记录一下 样式看起来倒是没多大区别&#xff0c;需求&#xff1a; 勾选了选框才可以点击文字 &#xff0c;一次只能点击一条数据&#xff0c;点…

Parameter-Efficient Fine-Tuning for Large Models: A Comprehensive Survey阅读笔记

Parameter-Efficient Fine-Tuning for Large Models: A Comprehensive Survey 综述阅读笔记 仅记录个人比较感兴趣的部分 基本知识 PEFT的三种分类&#xff1a;additive, selective, reparameterized, and hybrid fine-tuning selective fine-tuning 不需要任何额外的参数&am…

Axure横向菜单高级交互

亲爱的小伙伴&#xff0c;在您浏览之前&#xff0c;烦请关注一下&#xff0c;在此深表感谢&#xff01; 课程主题&#xff1a;横向菜单高级交互 主要内容&#xff1a;横向菜单左右拖动、选中效果 应用场景&#xff1a;app横向菜单、pc后台动态区域 案例展示&#xff1a; 演…

SpringBoot技术的车辆管理流程自动化

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

uniapp-实现天地图以及行政区划图层覆盖

前言&#xff1a; 在uniapp中&#xff0c;难免会遇到使用地图展示的功能&#xff0c;但是百度谷歌这些收费的显然对于大部分开源节流的开发者是不愿意接受的&#xff0c;所以天地图则是最佳选择。 此篇文章&#xff0c;详细的实现地图展示功能&#xff0c;并且可以自定义容器宽…

探索 Jupyter 笔记本转换的无限可能:nbconvert 库的神秘面纱

文章目录 探索 Jupyter 笔记本转换的无限可能&#xff1a;nbconvert 库的神秘面纱背景&#xff1a;为何选择 nbconvert&#xff1f;库简介&#xff1a;nbconvert 是什么&#xff1f;安装指南&#xff1a;如何安装 nbconvert&#xff1f;函数用法&#xff1a;简单函数示例应用场…

安装vue发生异常:npm ERR! the command again as root/Administrator.

一、异常 npm ERR! The operation was rejected by your operating system. npm ERR! Its possible that the file was already in use (by a text editor or antivirus), npm ERR! or that you lack permissions to access it. npm ERR! npm ERR! If you believe this might b…

安卓开发中轮播图和其指示器的设置

在安卓开发中&#xff0c;轮播图&#xff08;Carousel&#xff09;是一种常见的UI组件&#xff0c;用于展示一系列图片或内容&#xff0c;用户可以左右滑动来切换不同的视图。轮播图通常用于展示广告、新闻、产品图片等。 轮播图的指示器&#xff08;Indicator&#xff09;则是…

大模型生图安全疫苗注入赛题解析(DataWhale组队学习)

引言 大家好&#xff0c;我是GISer Liu&#x1f601;&#xff0c;一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年10月实践赛的大模型生图安全疫苗注入赛道&#xff1b;本文主要整理本次赛事的基本流程和优化方法。&#x1f495;&#x1f495;&#x1f60a; 一…