面试经典算法150题系列-找出字符串中第一个匹配项的下标

news2024/9/24 13:22:48

找出字符串中第一个匹配项的下标

给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回  -1 

示例 1:

输入:haystack = "sadbutsad", needle = "sad"
输出:0
解释:"sad" 在下标 0 和 6 处匹配。
第一个匹配项的下标是 0 ,所以返回 0 。

示例 2:

输入:haystack = "leetcode", needle = "leeto"
输出:-1
解释:"leeto" 没有在 "leetcode" 中出现,所以返回 -1 

实现思路:

此题比较简单,就是检查 haystack 是否包含needle字符串,如果包含则返回第一个匹配的字符位置,如果不匹配则返回-1,Java中有一个内置的方法indexOf()恰好实现该功能。

实现代码:

    public int strStr(String haystack, String needle) {
        // 如果needle是空字符串,根据约定返回0
        if (needle.isEmpty()) {
            return 0;
        }
        // 使用Java内置的indexOf方法查找子字符串
        int index = haystack.indexOf(needle);
        // 如果没有找到,indexOf会返回-1
        return index;
    }

   

知识补充:

在Java中,indexOfString 类的一个方法,用于查找子字符串(needle)在字符串(haystack)中第一次出现的索引。如果找到子字符串,indexOf 返回它在父字符串中的位置索引;如果没有找到,它返回 -1

以下是 indexOf 方法的一些常见用法:

  1. 基本使用

    int index = haystack.indexOf(needle);

    这将返回子字符串 needle 在字符串 haystack 中第一次出现的索引。

  2. 从特定索引开始搜索

    int index = haystack.indexOf(needle, 5);

    这将从索引 5 开始在 haystack 中搜索 needle,返回从该索引开始的第一次出现的索引。

  3. 忽略大小写的搜索

    int index = haystack.indexOf(needle, 0); 
    if (index == -1) { 
      // 转换为全小写再搜索 
      index = haystack.toLowerCase().indexOf(needle.toLowerCase()); 
    
    }

       toLowerCase()String 类的一个方法,用于将字符串中的所有字符转换为小写。这个方法不改变原始字符串,因为它返回一个新的字符串,其中包含转换后的小写字符。indexOf 方法本身不提供直接忽略大小写的选项,但可以通过转换两个字符串为全小写或全大写后再进行搜索。

注意indexOf 方法是区分大小写的,并且它按照从左到右的顺序搜索,一旦找到匹配的子字符  串,就会停止搜索并返回索引。

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

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

相关文章

前缀和差分【算法 13】

在算法领域中,前缀和与差分数组是两种高效处理区间问题的技术。它们能在特定问题场景下将时间复杂度从 (O(n)) 降到 (O(1)),适用于频繁的区间查询与修改操作。本文将简要介绍这两种技术及其应用。 1. 前缀和 (Prefix Sum) 前缀和是指一个数组的第 (i)…

【微信小程序】小程序的 MobX 绑定辅助库

小程序的 MobX 绑定辅助库 小程序的 MobX 绑定辅助库。 此 behavior 依赖开发者工具的 npm 构建。具体详情可查阅 官方 npm 文档 。 可配合 MobX 的小程序构建版 npm 模块 mobx-miniprogram 使用。 使用方法 需要小程序基础库版本 > 2.2.3 的环境。 也可以直接参考这个代码…

阿里云OSS迁移至华为云OBS,Java整合华为云OMS实现文件的自动批量迁移功能

华为云OBS 华为云对象存储服务(Object Storage Service,简称OBS)是华为云提供的一个高可靠、高安全、高可扩展的云存储服务。它允许用户在云上存储和管理海量数据,如图片、视频、文档、备份文件等。OBS 可以用作数据备份、文件共享、大数据存储、以及静态网站托管等多种用…

C++标准 alignas 与 windows 封装指令 (pack pragma) 的区别

C标准 alignas 与 windows 封装指令 (pack pragma) 的区别 结构体内存对齐受到二方面的影响【共同作用】: 一个方面是语言的对齐规则》语言的对齐规则 参考 https://blog.csdn.net/weixin_43698578/article/details/104801421 【主要影响因素是成员的对齐大小】【基本类型的对…

OpenCV小练习:人脸检测

OpenCV自带人脸检测模型,拿来就能用。所以“人脸检测”这个任务对于OpenCV而言真是太简单了——感叹一下:OpenCV太强大了!相关的介绍文章在网上可以搜到很多,原本我觉得没必要再写一篇了。结果我在写练习代码的时候,还…

【王树森】RNN模型与NLP应用(3/9):Simple RNN模型(个人向笔记)

前言 现在RNN已经没有以前那么流行了。在数据量大的情况下不如Transformer,但是在小数据的情况下仍然表现良好。 How to model sequential data? 1. one to one模型 像MLP和CNN,还有前面两节课讲到的二分类问题,都是基于one to one模型&a…

安装jmeter的梯度压测线程组(Custom Thread Groups)的插件

1、打开:Install :: JMeter-Plugins.org 2、进入主页后点击下面图片的链接进行安装 3、将安装包放入apache-jmeter-5.4.1 > lib > ext 里面 4、打开Jmeter 点击下面的【Plugins Manager】 5、进入 【Plugins Manager】后选择【Avaliable Plug…

Apache Flink 零基础入门(二):开发环境搭建和应用的配置、部署及运行

关联比赛: Apache Flink极客挑战赛——Flink TPC-DS性能优化 作者:沙晟阳 本文是根据 Apache Flink 系列直播课程整理而成,由阿里巴巴高级开发工程师沙晟阳分享,主要面向于初次接触 Flink、或者对 Flink 有了解但是没有实际操作过的同学。…

【分布式定时任务】XXL-JOB_2.4.1部署与实战

部署 分布式任务调度平台XXL-JOBXXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。https://www.xuxueli.com/xxl-job/ 一 数据库配置 执行初始化数据库…

flutter和原生Android以及IOS开发相比有什么优缺点?

Flutter 是 Google 开发的一个开源移动应用开发框架,它使用 Dart 语言编写。Flutter 的主要目标是使开发者能够从单一的代码库构建高性能、高保真的应用程序,这些应用程序可以在 iOS 和 Android 平台上运行,同时保持原生应用的感觉。 Flutte…

tomcat架构设计分析,核心组件详解

提示:tomcat整体架构分析,tomcat核心组件详解、tomcat请求全流程、tomcat设计模式分析。责任链模式设计、tomcat设计详解、tomcat调优的前置文档 文章目录 前言一、相关概念1、tomcat的概念2、web应用部署的3种方式 二、tomcat的整体架构1、tomcat架构图…

三星与海力士发力决战HBM4

在8月中旬,三星宣布正在加速推进下一代HBM(High Bandwidth Memory)的研发,目标是在今年年底前完成HBM4的设计定稿(tape-out)。而SK海力士则继续保持其竞争力,计划在10月份完成HBM4的设计定稿&am…

华为云征文|部署私有云和文档管理系统 Kodcloud

华为云征文|部署私有云和文档管理系统 Kodcloud 一、Flexus云服务器X实例介绍1.1 云服务器介绍1.2 应用场景1.3 对比普通ECS 二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置 三、部署 Kodcloud3.1 Jellyfin 介绍3.2 Docker 环境搭建3.3 Jell…

Linux内核6.12新特性:panic之后扫码显示故障信息

Linux 内核 6.12 版本即将引入一项有趣的功能——在内核Panic时显示一个可选的二维码。这一功能将允许用户通过扫描二维码直接访问内核Panic信息的日志,从而更容易地诊断问题所在。 这不是 Linux 第一次尝试使用二维码。早在2014年,就有过关于在内核Pani…

docker-compose容器及Dockerfile的使用

软件资源: 链接: https://pan.baidu.com/s/1iYMP7p7v_HUMc9vakIQfbQ?pwd6fes 提取码: 6fes docker-compose容器 部署nmt---nginxcomposetomcat项目 使用基础的docker指令来创建镜像,实现项目的发布。 Dockerfile--->docker-compose 背景&#x…

[知识技巧] iPhone 15 卡在恢复模式修复方法

如果您发现您的iPhone 15 卡在恢复模式下,这可能是一次相当紧张的经历,尤其是当它阻止您使用手机时。请放心,这是许多 iPhone 用户面临的共同挑战。幸运的是,有一些行之有效的方法可以解决此问题并将您的 iPhone 恢复到正常功能。…

启动盘如何复原

条件: 本教程适合Windows系统 通过Diskpart CMD启动U盘还原U盘在Windows中还有CMD命令可以使用 先“WindowsR”呼出运行窗口,在命令行中搜索"Diskpart"。点击回车输入“list disk”并且回车输入“select disk X”(X为替换可启动u盘的磁盘号)…

Vite项目启动服务器时报错 Error: Cannot find module @rollup/rollup-win32-x64-msvc.

前言: 网上找了很多方法,尝试后都不行。在某篇文章评论区种找到了一种方法解决了,谨以此篇文章记录解决问题的方案,方便日后使用。 解决方法:github链接 Cannot find module rollup/rollup-win32-x64-msvc (rollup 4.…

idea配置连接数据库的操作方法(适配不同版本)

文章目录 一、IDEA找不到database图标的解决方法二、链接数据库 一、IDEA找不到database图标的解决方法 首先很多小伙伴说我左右侧边栏都找了找不到数据库图标 解决办法: 第一种:选择 View --> Tool Windows --> Database 如果你的idea版本在这里…

昂瑞微IPO:华为、小米看重的国产射频芯片,“腾飞”了吗?

从一些科技大厂的投资动向中,往往能够发现一些新的技术力量正在酝酿。 据悉,近日,小米、华为投资的射频芯片供应商——北京昂瑞微电子技术股份有限公司(以下简称“昂瑞微”)在北京证监局办理辅导备案登记,…