LeetCode150道面试经典题--判断子序列(简单)

news2024/10/3 8:31:48

1.题目

给定字符串 st ,判断 s 是否为 t 的子序列。

字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace""abcde"的一个子序列,而"aec"不是)。

进阶:

如果有大量输入的 S,称作 S1, S2, ... , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码?

2.示例


3.思路

双指针:
设置两个指针,一个T指针指向T并且遍历t,另一个有效位指针Sindex指向s初始位置,当数组中两者值相等时候S指针下移一位,当有效位指针一旦到达s字符串长度则返回true,否则返回false

4.代码

LeetCode代码:

class Solution {
    public boolean isSubsequence(String s, String t) {
        int sIndex = 0;

        if(s.length() == 0){
            return true;
        }
        for (int i=0;i<t.length();i++){
            if (s.charAt(sIndex)==t.charAt(i)){
                sIndex++;
                if(sIndex == s.length()){
                    return true;
                }
            }
        }
        return false;
    }
}

 案例详细代码:

package LeetCode11;

public class javaDemo {
    public static void main(String[] args) {
        String s = "a";
        String t = "ahbgdc";
        boolean flag = false;

//        S字符串有效位指针
        int sIndex = 0;
//        判断是否为特殊情况即s若为空,则直接输出true
        if (s.equals("")){
            System.out.println(true);
        }else {
//            不是特殊情况则进行双指针判断
            for (int i=0;i<t.length();i++){
//                判断是否值相等
                if (s.charAt(sIndex)==t.charAt(i)){
                    sIndex++;
//                    如果sIndex遍历完,也就意味着存在子序列输出flag并即使跳出防止越界
                    if (sIndex == s.length()){
                        flag = true;
                        break;
                    }
                }
            }
        }
        System.out.println(flag);
    }
}

时间复杂度为O(n),空间复杂度为O(1)

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

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

相关文章

leetcode19. 删除链表的倒数第 N 个结点

题目&#xff1a;leetcode19. 删除链表的倒数第 N 个结点 描述&#xff1a; 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 思路&#xff1a; 让前面的节点比后面的节点先走n1步&#xff0c;因为从链表的尾节点的下一个节点开始&…

【数据结构】“单链表”的练习题(二)

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

linux学习(进程创建)[8]

创建进程 myproc.c #include <stdio.h> #include <unistd.h>int main() {printf("我是父进程\n");pid_t id fork();if(id < 0){printf("创建子进程失败\n");return 1;}else if(id 0){while(1){printf("我是子进程&#xff1a; pid…

Java基础入门篇——数组初识

一、数组 1.假设某公司有100个员工&#xff0c;需要统计某公司员工的工资情况&#xff0c;首先需要声明100个变量来分别记每个员工的工资&#xff0c;那么如果按照之前的做法&#xff0c;可能定义的结构如下所示&#xff1a; int a1,a2,a3,......a100; 要求你输出这100个员工…

如何将maven部署在Idea的教学,和idea介绍

目录 一.idea介绍&#xff0c;以及一些基本特点&#xff01; 1.1idea介绍 1.2idea特点 1.3.idea和eclipse区别 1.4idea安装 4.1下载网址 4.2下载后安装&#xff08;见图片&#xff09; 1.5 Idea的一些操作更改 5.1主题颜色 5.2设置鼠标悬浮提示 5.3显示方法分隔符 5.4忽…

如何解决新学期分班查询公布难题?试试这个方法

作为教师&#xff0c;我们常常需要进行学生分班管理&#xff0c;这项工作繁琐但至关重要。为了提高工作效率&#xff0c;我们可以利用现代技术开发一款学生分班查询系统。本文将介绍如何设计和开发这个系统。 首先&#xff0c;我们可以选择使用易查分这样的工具来帮助我们管理…

[git] git基础知识

git是一个免费的、开源的分布式版本控制系统&#xff0c;可以快速高效地处理从小型到大型的各种项目 git易于学习&#xff0c;性能极快 什么是版本控制&#xff1f; 版本控制是一种记录文件内容变化&#xff0c;以便将来查阅特定版本修订情况&#xff0c;可以记录文件修改历史…

(学习笔记-进程管理)多线程冲突如何解决

对于共享资源&#xff0c;如果没有上锁&#xff0c;在多线程的环境里&#xff0c;很有可能发生翻车。 竞争与合作 在单核 CPU 系统里&#xff0c;为了实现多个程序同时运行的假象&#xff0c;操作系统通常以时间片调度的方式&#xff0c;让每个进程每次执行一个时间片&#xf…

现在国家正规相亲平台有哪些?盘点五款安全值得使用的相亲软件

随着互联网的普及&#xff0c;越来越多的人选择通过相亲软件寻找自己的另一半。但是&#xff0c;在众多相亲软件中靠谱的相亲软件有哪些呢&#xff0c;该如何选择&#xff1f;本文将盘点几款安全靠谱的相亲软件&#xff0c;可以了解看看哪个适合你。 第一款&#xff1a;一伴婚…

恭喜又一白鲸开源成员成为 Apache SeaTunnel PMC Member

个人简介 王海林 白鲸开源研发工程师GitHub ID&#xff1a;hailin0做过性能监控、数据开发平台等&#xff0c;目前聚焦在数据集成同步及其周边生态的研发 问&#xff1a;作为白鲸开源的一员&#xff0c;您为社区做出过哪些贡献&#xff1f;具体方案&#xff08;代码类&#x…

OpenStack-Y版安装部署

OpenStack-Y版安装部署 目录 OpenStack-Y版安装部署 1、环境准备 1.1 环境简介1.2 配置hosts解析(所有节点)1.3 配置时间同步1.4 安装openstack客户端(控制节点执行)1.5 安装部署MariaDB(控制节点执行)1.6 安装部署RabbitMQ(控制节点执行)1.7 安装部署Memcache(控制节点执行)2、…

机器学习笔记值优化算法(十四)梯度下降法在凸函数上的收敛性

机器学习笔记之优化算法——梯度下降法在凸函数上的收敛性 引言回顾&#xff1a;收敛速度&#xff1a;次线性收敛二次上界引理 梯度下降法在凸函数上的收敛性收敛性定理介绍证明过程 引言 本节将介绍梯度下降法在凸函数上的收敛性。 回顾&#xff1a; 收敛速度&#xff1a;次…

MySQL_数据库的DCL语句

DCL 定义&#xff1a;Data Control Language(数据控制语言)&#xff0c;用来管理数据库用户、控制数据库的访问权限。 管理用户(% 代表通配符) 查询用户 SELECT * FROM mysql.user; 创建用户 CREATE USER ‘用户名’‘主机名’ IDENTIFIED BY ‘密码’; 修改用户 ALTER USE…

01:STM32点灯大师和蜂鸣器

目录 一:点亮1个LED 1:连接图 2:函数介绍 3:点灯代码 二:LED闪烁 1:函数介绍 2:闪烁代码 三:LED流水灯 1:连接图 2:函数介绍 3:流水灯代码 四:蜂鸣器 1:连接图 2:蜂鸣器代码 一:点亮1个LED 1:连接图 因为IO口与LED负极相连所以IO口输出低电频,点亮LED (采用的是低…

Android系统组件——AMS,App启动中的AMS流程

AMS&#xff08;Activity Manager Service&#xff09;是Android系统中非常重要的一个组件&#xff0c;负责管理应用程序的生命周期、进程调度以及任务栈的管理等任务。本文将从AMS的原理、数据结构、SystemServer加载AMS以及App启动中的AMS流程等方面进行详细介绍&#xff0c;…

存储过程的学习

1&#xff0c;前言 这是实习期间学习的&#xff0c;我可能是在学校没好好听课&#xff0c;&#xff08;或者就是学校比较垃&#xff0c;没教这部分&#xff0c;在公司经理让我下去自己学习&#xff0c;太难了&#xff0c;因为是公司代码很多部分都是很多表的操作&#…

UI美工设计岗位的工作职责

UI美工设计岗位的工作职责1 职责&#xff1a; 1、负责软件界面的美术设计、创意工作和制作工作; 2、根据各种相关软件的用户群&#xff0c;提出构思新颖、有高度吸引力的创意设计; 3、对页面进行优化&#xff0c;使用户操作更趋于人性化; 4、维护现有的应用产品; 5、收集和…

MySQL SUBSTRING_INDEX() 函数的详细介绍

MySQL SUBSTRING_INDEX() 从给定字符串中返回指定数量的分隔符出现之前的子字符串。 当指定数字为正数时从最终分隔符的左侧返回子字符串&#xff0c;当指定数字为负数时从最终分隔符的右侧返回子字符串。 如果指定的次数大于分隔符的出现次数&#xff0c;则返回的子字符串将…

项目经理一起趟过的那些“坑”

大家好&#xff0c;我是老原。 在项目管理这行&#xff0c;有很多项目经理的前身都是搞技术的&#xff0c;他们大多数是因为技术工作做得好而走上管理岗位。 然而&#xff0c;这样走来的技术领导&#xff0c;在刚晋升时&#xff0c;往往会面临很多问题&#xff0c;经历痛苦的…

【Opencv入门到项目实战】(九):项目实战|信用卡识别|模板匹配|(附代码解读)

所有订阅专栏的同学可以私信博主获取源码文件 文章目录 0.背景介绍1.模板处理1.1模板读取1.2预处理1.3轮廓计算 2.输入图像处理2.1图形读取2.2预处理2.3轮廓计算2.4计算匹配得分 3.小结 0.背景介绍 接下来我们正式进入项目实战部分&#xff0c;这一章要介绍的是一个信用卡号识…