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

news2024/9/28 13:25:45

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

文章目录

  • 一、题目
  • 二、思路
  • 三、解决方案
  • 四、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

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

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

相关文章

某大型央企主数据项目实战,上线前后深度对比与解析

数据已成为数字化转型的核心&#xff0c;如何将数据转化为战略资产&#xff0c;是当今企业迫切需要解决的问题。其中主数据作为企业的“黄金数据”&#xff0c;是数据资产管理实践方式的重要切入方法之一。某大型央企成功实施了主数据管理项目&#xff0c;实现了从数据孤岛到一…

寻找最大价值的矿堆 - 矩阵

系列文章目录 文章目录 系列文章目录前言一、题目描述二、输入描述三、输出描述四、Java代码五、测试用例 前言 本人最近再练习算法&#xff0c;所以会发布一些解题思路&#xff0c;希望大家多指教 一、题目描述 给你一个由’0’(空地)、‘1’(银矿)、‘2’(金矿)组成的地图…

揭秘自行车对人体的神奇力量

想象一下&#xff0c;如果有一种魔法&#xff0c;能让你每施展一次就多一个小时的寿命&#xff0c;你会心动吗&#xff1f;这种魔法确实存在&#xff0c;它就是——骑自行车。没错&#xff0c;你没有听错&#xff0c;根据最新的研究数据&#xff0c;“骑行一小时&#xff0c;长…

vue布局设置——使用 el-drawer 打造个性化 Admin 后台布局设置

在前端开发中&#xff0c;我们常常需要为 admin 后台构建灵活且个性化的布局设置。今天&#xff0c;我要分享的是如何利用 el-drawer 来实现这样一个有趣的功能。 首先&#xff0c;我们来看一下主要的设置参数&#xff1a; 1. theme: 用于定义主题&#xff0c;可以根据需求切换…

政安晨:【Keras机器学习示例演绎】(四十二)—— 使用 KerasNLP 和 tf.distribute 进行数据并行训练

目录 简介 导入 基本批量大小和学习率 计算按比例分配的批量大小和学习率 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在…

电脑文件找回恢复软件分享,3款软件助力数据恢复!

使用电脑时一不小心就删除了重要文件&#xff1f;想找回数据却不知道应该怎么操作&#xff1f;众所周知&#xff0c;电脑的使用已经成为我们工作、学习和生活中不可或缺的工具&#xff0c;但是在操作时误删文件是令很多用户都头疼的问题。 怎么恢复电脑里被删除的文件呢&#…

LabVIEW天然气压缩因子软件设计

LabVIEW天然气压缩因子软件设计 项目背景 天然气作为一种重要的能源&#xff0c;其压缩因子的准确计算对于流量的计量和输送过程的优化具有关键意义。传统的计算方法不仅步骤繁琐&#xff0c;而且难以满足现场快速响应的需求。因此&#xff0c;开发一款既能保证计算精度又便于…

一个开源即时通讯源码

一个开源即时通讯源码 目前已经含服务端、PC、移动端即时通讯解决方案&#xff0c;主要包含以下内容。 服务端简介 不要被客户端迷惑了&#xff0c;真正值钱的是服务端&#xff0c; 服务是采用Java语言开发&#xff0c;基于spring cloud微服务体系开发的一套即时通讯服务端。…

【XR806开发板试用】试用SWD+Jlink调试

XR806开发板&#xff0c;只能使用编写代码&#xff0c;然后通过UART下载&#xff0c;没法在线debug&#xff0c; 效率会差很多&#xff0c;官方没有提供这一方面的资料。 先查CPU&#xff0c; 官方介绍是arm-china的MC1&#xff0c;通过armv8 Architecture refenence manual资料…

linux打包流程

因为linux有俩个python版本&#xff0c;我们需要切换到python3这个版本&#xff0c;默认是python 2.7 alias pythonpython3 切换到python3 再次执行&#xff1a;python -V 显示出python的版本了&#xff0c;然后查看pip的配置&#xff0c;我们打包里面需要的第三方需要放到pip…

使用IDA自带python patch的一道例题

首先看见就是迷宫 迷宫解出的路径&#xff0c;放在zip的文件可以得到一个硬编码 然后在原程序中&#xff0c;有一处很离谱 这个debugbreak就是IDA分析错误导致的 我们点进去发现里面全是nop 然后我们把我们得到的硬编码放在010里面&#xff0c;再用IDA打开 重新编译看汇编 你…

高性能运营级流媒体服务框架:支持多协议互转 | 开源日报 No.250

ZLMediaKit/ZLMediaKit Stars: 12.6k License: NOASSERTION ZLMediaKit 是一个基于 C11 的高性能运营级流媒体服务框架。 使用 C11 开发&#xff0c;避免裸指针&#xff0c;代码稳定可靠&#xff0c;性能优越。支持多种协议 (RTSP/RTMP/HLS/HTTP-FLV/WebSocket-FLV/GB28181 等…

JavaEE之线程(3)_线程的开始、中断、等待、休眠线程、线程的状态

前言 在本栏的上一节&#xff08;https://blog.csdn.net/2301_80653026/article/details/138500558&#xff09;&#xff0c;我们重点讲解了五种不同的创建线程的方式&#xff0c;我们还介绍了Tread类的常见构造方法和常见属性&#xff0c;在这一节中我们将会继续介绍Tread类。…

5/11后面部分:+顺序排序+元素交换+计算每门课程的各种成绩+存放规律的数据 注意:一味的复制肯定要出问题,第2个的最后一部分有修改,注意观察

目录 第一个已经输出过一次&#xff1a; 第二个: 编程实现&#xff1a;程序功能是用起泡法对数组中n个元素按从大到小的顺序进行排序。 ​编辑的确出现了一些问题哦&#xff1a; ​编辑目前是可以运行&#xff0c;但AI不给我们通过&#xff1a; 最后还是我的代码获胜&#x…

苹果电脑怎么安装crossover 如何在Mac系统中安装CrossOver CrossOver Mac软件安装说明

很多Mac的新用户在使用电脑的过程中&#xff0c;常常会遇到很多应用软件不兼容的情况。加上自己以前一直都是用Windows系统&#xff0c;总觉得Mac系统用得很难上手。 其实&#xff0c;用户可以在Mac上安装CrossOver&#xff0c;它支持用户在Mac上运行Windows软件&#xff0c;例…

C++牛客小白月赛题目分享(1)生不逢七,交换数字,幻兽帕鲁

目录 1.前言 2.三道题目 1.生不逢七 1.题目描述 2.输入描述: 3.输出描述: 4.示例&#xff1a; 5.题解&#xff1a; 2.交换数字 1.题目描述&#xff1a; 2.输入描述&#xff1a; ​编辑 3.输出描述&#xff1a; 4.示例&#xff1a; 5.题解&#xff1a; 3.幻兽帕…

开源基金会AtomGit教程

大家伙&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。 注册 点击链接进入官网&#xff0c;先注册&#xff0c;然后登录&#xff1a;https://atomgit.com/ 编辑个人资料&#xff0c;修改一下自己的信息&#xff0c;用户名后面提交代码的时候要…

frida反检测

一、frida介绍 简单来说&#xff0c;Frida是一个动态代码插桩框架。这意味着它能够在程序运行的时候&#xff0c;不改变原有程序代码的情况下&#xff0c;让你往里面添加自己的代码片段。这听起来可能有点像魔法&#xff0c;但实际上&#xff0c;它是通过一种叫做“HOOK”的技术…

解构复合人工智能系统(Compound AI Systems):关键术语、理论、思路、实践经验

编者按&#xff1a; 大模型的出现为构建更智能、更复杂的人工智能系统带来了新的契机。然而&#xff0c;单一的大模型难以应对现实世界中错综复杂的问题&#xff0c;需要与其他模块相结合&#xff0c;构建出复合人工智能系统&#xff08;Compound AI Systems&#xff09;。 本文…

wordpress 访问文章内容页 notfound

解决&#xff1a; 程序对应的伪静态规则文件.htaccess是空的 网站根目录下要有 .htaccess 文件&#xff0c;然后将下面的代码复制进去。 <ifmodule mod_rewrite.c>RewriteEngine OnRewriteBase /RewriteRule ^index\.php$ - [L]RewriteCond %{REQUEST_FILENAME} !-fRew…