【LeetCode算法】28. 找出字符串中第一个匹配项的下标

提示:此文章仅作为本人记录日常学习使用,若有存在错误或者不严谨得地方欢迎指正。

文章目录

  • 一、题目
  • 二、思路
  • 三、解决方案
  • 四、JAVA截取字符串的常用方法
    • 4.1 通过subString()截取字符串*

一、题目

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

二、思路

①当haystack字符串的长度小于needle的长度时,那么返回-1。
②若haystack字符串的长度大于等于needle的长度,遍历haystack字符串,在haystack字符串中找到与needle字符串首个字符相同的字符。
③通过substring()方法,从haystack字符串中截取字符串,然后将截取出来的字符串与needle进行比较。
④若截取的字符串与needle相同,则返回首个字符的下标。

三、解决方案

语言:Java
执行耗时:0 ms
内存消耗:40.62 MB

class Solution {  
    public int strStr(String haystack, String needle) {  
        int haystack_length = haystack.length();  
        int needle_length = needle.length();  
        //needle的起始字符
        char needle_first = needle.charAt(0);  
        //只有当haystack长度大于needle的时候才会执行
        for (int i = 0; i <= haystack_length - needle_length; i++) { 
            if (haystack.charAt(i) == needle_first) {  
                // 比较从当前位置开始的子字符串和 needle 是否相等  
                if (haystack.substring(i, i + needle_length).equals(needle)) {  
                    return i; // 如果相等,返回当前位置  
                }  
            }  
        }  
        // 如果循环结束都没有找到,返回 -1  
        return -1;  
    }  
}

语言:Java
执行耗时:0 ms
内存消耗:40.67 MB

class Solution {
    public int strStr(String haystack, String needle) {
        char needle_first = needle.charAt(0);
        if (haystack.length() >= needle.length()) {
            for (int i = 0; i < haystack.length(); i++) {
                char ch = haystack.charAt(i);
                if ((ch == needle_first) && (haystack.length() - i >= needle.length())) {
                    if (haystack.substring(i, i + needle.length()).equals(needle)) {
                        return i;
                    }
                }
            }
        }
        return -1;
    }
}

假设我们有一个字符串 haystack 的长度为 m,另一个字符串 needle 的长度为 n。
①为了确保可以正确的比较,haystack 中的起始字符索引 i 必须满足 i + n <= m,因为我们需要 n 个字符来与 needle 进行比较。②如果 i 大于 m - n,那么当我们尝试从 haystack 中获取 substring(i, i + n) 时,将会超出 haystack 的边界,因为 i + n 将大于 m。③因此,我们的循环应该确保 i 不会超出这个范围。这就是为什么循环条件写成 i <= haystack_length - needle_length 的原因。

四、JAVA截取字符串的常用方法

4.1 通过subString()截取字符串*

  • substring(int beginIndex) 一个参数
//从指定索引处的字符开始,截取直到此字符串末尾
public String substring(int beginIndex) {
  · · ·
}

例如有以下字符串:

                 3
String str = "abcdefghijklmn";
                 ↑_________↑
// 那么调用substring(beginIndex)方法后 从索引号3开始截取到字符串末尾
str.substring(3);// 得到的字符串是defghijklmn
  • substring(int beginIndex, int endIndex) 两个参数
// 从beginIndex开始,截取到索引endIndex - 1处的字符
public String substring(int beginIndex, int endIndex)  {
  · · ·
} 

例如有以下字符串:

              0 2
String str = "abcdefghijklmn";
              ↑_↑
// 那么调用substring(beginIndex)方法后 从索引号0开始截取到索引号为3的位置(不包括索引号为3的字符)
str.substring(0,3); // 得到的字符串是abc

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu安装oceanbase调通本地navicat链接

分为两部分 一安装oceanbase服务 准备工作 mkdir -p /data/1 /data/log1 chown -R admin.admin /data/1 /data/log1/偷偷说&#xff1a;其实这步我忘记执行&#xff0c;也没影响我安装 oceanbase程序是很占内存的在安装时我们要先下载好安装包&#xff1a; 然后放在能记住的…

react引入阿里矢量库图标

react引入阿里矢量库图标 登录阿里矢量库&#xff0c;将项目所需的图标放一起 react项目中新建文件夹MyIcon.js 3. 在页面中引入&#xff0c;其中type为图标名称

机器人系统ros2-开发实践08-了解如何使用 tf2 来访问坐标帧转换(Python)

tf2 库允许你在 ROS 节点中查询两个帧之间的转换。这个查询可以是阻塞的&#xff0c;也可以是非阻塞的&#xff0c;取决于你的需求。下面是一个基本的 Python 示例&#xff0c;展示如何在 ROS 节点中使用 tf2 查询帧转换。 本教程假设您已完成tf2 静态广播器教程 (Python)和tf…

探索循环购模式:消费返利与积分机制的创新融合

大家好&#xff0c;我是吴军&#xff0c;今天非常荣幸能与大家分享一种别具一格的商业模式——循环购模式。这种商业模式在近年来逐渐崭露头角&#xff0c;受到了广大消费者的热烈追捧。或许您之前听说过消费满额即送现金的活动&#xff0c;但循环购模式不仅仅局限于此&#xf…

单细胞分析:多模态 reference mapping (2)

引言 本文[1]介绍了如何在Seurat软件中将查询数据集与经过注释的参考数据集进行匹配。我们展示了如何将来自不同个体的人类骨髓细胞&#xff08;Human BMNC&#xff09;的人类细胞图谱&#xff08;Human Cell Atlas&#xff09;数据集&#xff0c;有序地映射到一个统一的参考框…

数据库数据恢复—Sql Server数据库文件丢失丢失怎么恢复数据?

数据库数据恢复环境&#xff1a; 5块硬盘组建一组RAID5阵列&#xff0c;划分LUN供windows系统服务器使用。windows系统服务器内运行了Sql Server数据库&#xff0c;存储空间在操作系统层面划分了三个逻辑分区。 数据库故障&#xff1a; 数据库文件丢失&#xff0c;主要涉及3个…

【微信开发】微信支付前期准备工作(申请及配置)

1、申请并配置公众号或微信小程序 1.1 账户申请 通过微信公众平台&#xff0c;根据指引申请微信小程序或公众号&#xff0c;申请时需要微信认证&#xff0c;申请流程不在赘述 1.2 信息配置 申请通过后&#xff0c;需进入小程序和公众号内进行信息配置 1.2.1 小程序信息配置…

如何批量将十六进制数据转成bin文件

最近在做新项目遇到一个问题&#xff0c;我们要通过上位机把一堆数据通过串口发送给下位机存储&#xff0c;而上位机需要Bin文件。 解决办法&#xff1a; 1)创建一个记事本文件&#xff0c;然后将其后缀修改成.bin 2)然后打开notepad,新建一个文件&#xff0c;随便写下数据 我…

怎么制作流程图?介绍制作方法

怎么制作流程图&#xff1f;在日常生活和工作中&#xff0c;流程图已经成为我们不可或缺的工具。无论是项目规划、流程优化&#xff0c;还是学习理解复杂系统&#xff0c;流程图都能帮助我们更直观地理解和表达信息。然而&#xff0c;很多人可能并不清楚&#xff0c;其实制作流…

【Linux】基础命令,文件处理,用户,vim编辑器,文件压缩

常用命令及参数&#xff1a;dir表示文件夹&#xff0c;file表示文件&#xff08;file可表示其他目录下的文件&#xff09; pwd命令&#xff1b;查看当前所属文件夹&#xff08;print working directory&#xff09; ls [选项] dir&#xff1b;查看当前、指定文件夹目录内容&am…

2.使用即时设计做页面原型

文章目录 1. 设计工具1.1. 上手1.2. 上手"即时设计"1.3. 产品原型偷师 2. 即时设计tips2.1. 完成后的效果图2.2. 画板 - iPhone容器2.3. 工具箱2.4. 画iPhone的状态栏和indicator2.4.1. 设计标准2.4.2. 小程序状态栏2.4.3. iPhone的indicator 2.5. 引入iconfont2.6. …

安全继电器的使用和作用

目录 一、什么是安全继电器 二、安全继电器的接线方式 三、注意事项 四、总结 一、什么是安全继电器 安全继电器是由多个继电器与硬件电路组合而成的一种模块&#xff0c;是一种电路组成单元&#xff0c;其目的是要提高安全因素。完整点说&#xff0c;应该叫成安全继电器模…

激光测径仪在胶管生产中扮演着什么角色?

关键词&#xff1a;激光测径仪,胶管,胶管测径仪,在线测径仪 胶管生产的基本工序为混炼胶加工、帘布及帆布加工、胶管成型、硫化等。不同结构及不同骨架的胶管&#xff0c;其骨架层的加工方法及胶管成型设备各异。 全胶胶管因不含骨架层&#xff0c;只需使用压出机压出胶管即可&…

APP广告转化流程对广告变现收益有影响吗?

对接广告平台做广告变现的APP开发者都清楚&#xff0c;广告变现的价格、收益不是一成不变的&#xff0c;经常会遇到eCPM波动对广告收益产生较大影响。 导致APP收益产生波动的因素包括&#xff1a;用户质量、广告类型、广告平台的资源波动、广告预算的季节性、广告展示量级等。…

【软考高项】四十一、十大管理记忆技巧

一、技巧1&#xff1a;绩效数据、信息、报告的流向 监控过程组除了 整合管理的2个过程&#xff0c;其余都有 绩效数据作为输入 监督风险 的输入同时有绩效数据和绩效报告 二、技巧2&#xff1a;可交付成果、核实的可交付成果、验收的可交付成果 三、技巧3&#xff1a;变更请求、…

Ansible之Playbook的Template模板和tags标签

文章目录 一、Template模块1、准备template模板文件2、修改主机清单文件3、编写playbook4、执行playbook5、准备测试网页6、访问测试 二、tags模块1、编写脚本2、执行tags"xx01"3、执行tags"xx02" 一、Template模块 Jinja是基于Python的模块引擎。Templat…

NPOI生成word浮动图标

1、NPOI版本2.7.0, net框架4.8 2、安装OpenXMLSDKToolV25.msi 3、先创建一个word文档&#xff0c;并设置图片为浮于文字之上 4、OpenXML显示的结果 5、实际代码如下&#xff1a; public class GenerateWordDemo {public GenerateWordDemo(){}//https://blog.fileformat.co…

【机器学习】卷积神经(CNN)在图像识别中的革命性应用:自动驾驶的崛起

卷积神经网络&#xff08;CNN&#xff09;在图像识别中的革命性应用&#xff1a;自动驾驶的崛起 一、卷积神经网络&#xff08;CNN&#xff09;的基本原理二、CNN在图像识别中的显著成果三、CNN在自动驾驶汽车中的物体检测和识别四、CNN在图像识别中的代码实例 随着人工智能和深…

Vue3人员选择组件封装

一、组件介绍 人员组件在各系统的应用都是比较广泛的&#xff0c;因此可以将其封装为可配置的人员组件&#xff0c;根据不同角色权限显示对应的人员供选择&#xff0c;代码目前只是一部分&#xff0c;需要源码的私聊。 二、直接上代码 use.vue 父组件 <div class&q…

干部管理系统亮点深度解析

在信息化浪潮的推动下&#xff0c;干部管理系统已成为组织高效运作的得力助手。该系统凭借一系列创新亮点&#xff0c;为干部的选拔、培养、评估和使用提供了强有力的支撑。 一、智能化与数据化&#xff1a;精准决策的基石 干部管理系统凭借大数据和人工智能技术的融合&#…