【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

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

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

相关文章

如果通过Glide 设置图片圆角

要给图片设置一个圆角,通常方法是在ImageView 标签外添加一个CardView 标签,然后设置圆角值,但是今天遇到一个问题就是 RecyclerView Item 中这样操作的话会遇到这样的一个报错: Cannot call this method while RecyclerView is computing a layout or scrolling androidx.rec…

web前端之sass中的颜色函数、active按钮激活、hover鼠标悬浮、disabled禁用、scss循环、css

MENU 效果图htmlsassscss编译后的css页面css 效果图 注意查看蓝色按钮。 html <div class"box"><button class"btn type_1">按钮</button><button class"btn type_2">按钮</button><button class"btn ty…

「TypeScript」TypeScript入门练手题

前言 TypeScript 越来越火&#xff0c;现在很多前端团队都使用它&#xff0c;因此咱们前端码农要想胜任以后的前端工作&#xff0c;就要更加熟悉它。 入门练手题 interface A {x: number;y: number; }type T Partial<A>;const a: T { x: 0, y: 0 }; const b: T { …

专题六_模拟(3)

目录 1419. 数青蛙 解析 题解 1419. 数青蛙 1419. 数青蛙 - 力扣&#xff08;LeetCode&#xff09; 解析 题解 class Solution { public:int minNumberOfFrogs(string croakOfFrogs) {// 44.专题六_模拟_数青蛙_Cstring t "croak";int n t.size();vector<in…

力扣HOT100 - 215. 数组中第K个最大元素

解题思路&#xff1a; 快速选择&#xff0c;目标是找出数组中第 k 小&#xff08;或第 k 大&#xff09;的元素&#xff0c;而不是对整个数组进行排序。 &#xff08;需要和快排进行区分&#xff0c;快排的目的是排序&#xff09; 注意&#xff1a; i l - 1, j r 1; 为什…

短剧奔向小程序,流量生意如何开启?

随着移动互联网的飞速发展&#xff0c;小程序作为一种轻量级、易传播的应用形态&#xff0c;逐渐在各个领域展现出其独特的商业价值。而最近爆火的短剧小视频作为一种受众广泛的娱乐形式&#xff0c;与小程序结合后&#xff0c;不仅为观众提供了更为便捷的观看体验&#xff0c;…

torch.searchsorted

torch.searchsorted 官方文档链接&#xff1a;torch.searchsorted — PyTorch 2.3 documentation 该函数用于在已排序的序列中查找要插入的值的位置&#xff0c;以保持序列的顺序&#xff0c; torch.searchsorted(sorted_sequence, values, *, out_int32False, rightFalse, s…

机器人系统ros2-开发实践09-如何向 tf2 添加额外的坐标帧位置(Python)

在之前的教程中&#xff0c;我们通过编写tf2 广播器和tf2 监听器重新创建了乌龟演示。本教程将教您如何向转换树添加额外的固定和动态框架。事实上&#xff0c;在 tf2 中添加框架与创建 tf2 广播器非常相似&#xff0c;但此示例将向您展示 tf2 的一些附加功能。 对于许多与转换…

自回归模型的优缺点及改进方向

在学术界和人工智能产业中&#xff0c;关于自回归模型的演进与应用一直是一个引发深入讨论和多方观点交锋的热门议题。尤其是Yann LeCun&#xff0c;这位享誉全球的AI领域学者、图灵奖的获得者&#xff0c;以及被誉为人工智能领域的三大巨擘之一&#xff0c;他对于自回归模型持…

Linux:进程概念(三.详解进程:进程状态、优先级、进程切换与调度)

上次讲了进程这些内容&#xff1a;Linux&#xff1a;进程概念&#xff08;二.查看进程、父进程与子进程、进程状态详解&#xff09; 文章目录 1.Linux中的进程状态1.1前台进程和后台进程运行状态睡眠状态磁盘休眠状态停止状态kill指令—向进程发送信号 死亡状态 2.僵尸进程2.1僵…

Java入门基础学习笔记16——运算符

package cn.ensource.operator;public class OperatorDemo1 {public static void main(String[] args) {// 目标&#xff1a;掌握基本的算术运算符的使用int a 10;int b 2;System.out.println(a b);System.out.println(a - b);System.out.println(a * b); // 20System.out.…

springboot项目打包部署

springboot打包的前提条件jdk必须17以后不然本地运行不来&#xff08;我用的jdk是22&#xff09; 查看自己电脑jdk版本可以参考&#xff08;完美解决Windows10下-更换JDK环境变量后&#xff0c;在cmd下执行仍java -version然出现原来版本的JDK的问题-CSDN博客&#xff09; 1、…