【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.mzph.cn/news/833450.shtml

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

相关文章

鸿蒙OpenHarmony南向:【Hi3516标准系统入门(IDE方式)】

Hi3516标准系统入门&#xff08;IDE方式&#xff09; 注意&#xff1a; 从3.2版本起&#xff0c;标准系统不再针对Hi3516DV300进行适配验证&#xff0c;建议您使用RK3568进行标准系统的设备开发。 如您仍然需要使用Hi3516DV300进行标准系统相关开发操作&#xff0c;则可能会出现…

CST电磁仿真查看模型的截面结构和生成Spice模型【入门教程】

通过Logfile查看仿真统计 一次性了解仿真统计! Post-Processing > Manage Results > Logfile 利用CPU Threads、Mesh Cells、Time Steps以及Total Solver Time等Logfile&#xff0c;可以一目了然地了解仿真统计。 &#xff08;1&#xff09;点击Post-Processing选项卡…

PPT如何录制视频?看这里,让你轻松上手!

在现代社会&#xff0c;演示文稿&#xff08;ppt&#xff09;已成为我们工作、学习和生活中不可或缺的一部分。无论是商务报告、教育培训还是产品展示&#xff0c;ppt都能以其直观、生动的形式有效地传达信息。可是你知道ppt如何录制视频吗&#xff1f;本文将为您介绍两种ppt录…

pycharm code行太长显示波浪线取消

实际操作如下&#xff1a;个人比较合适的位置为160,180时有点多 效果&#xff1a;

算法练习17——罗马数字转整数

LeetCode 13 罗马数字转整数 罗马数字包含以下七种字符: I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如&#xff0c; 罗马数字 2 写做 II &#xff0c;即为两个并列的 1 。12 写做 XII …

c++ memset 指针示例

目录 C 传一个float指针&#xff0c;在函数内部修改指针的值 c memset 指针示例 C 传一个float指针&#xff0c;在函数内部修改指针的值 #include <iostream>// 定义一个函数&#xff0c;它接受一个指向float的指针 void modifyValue(float* ptr) {// 通过解引用指针来…

Tomcat8集群快速搭建指南

作为一名热衷于分布式系统的开发者&#xff0c;你或许对Tomcat8已经不陌生了。然而&#xff0c;单个Tomcat实例的性能和可用性总有瓶颈&#xff0c;要实现高可用性和更强的性能&#xff0c;就需要搭建一个Tomcat集群。在这篇文章中&#xff0c;我将带你一步步搭建一个基于Tomca…

TypeScript学习笔记(三) 数组

大家好&#xff0c;我是半虹&#xff0c;这篇文章来讲 TypeScript 中的数组以及元组类型 1、概述 在 JavaScript 中的数组&#xff0c;在 TypeScript 里&#xff0c;可具体分为数组以及元组两种类型 先来简单对比一下区别&#xff1a; JavaScript 中的数组&#xff0c;可以用…

《视觉十四讲》例程运行记录(3)——运行ch6的例程中Ceres和g2o库的安装

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、安装Ceres1. 安装依赖2. 编译安装 二、安装g2o1. 安装依赖项2. 编译安装3. 可能出现的报错(1) 报错一 一、安装Ceres 1. 安装依赖 终端输入&#xff1a; sud…

wow-debug文件说明

wow-debug文件说明 项目地址&#xff1a;https://gitee.com/wow-iot/wow-iot7本文件的的功能为输出打印信息&#xff0c;目前架构debug信息按照模块名称进行区别使用&#xff0c;且支持打印级别设置&#xff1b;加入shell指令&#xff0c;可通过debug XXX on/off 来实时开启或…

计算有效声压

计算有效声压 clear all; %%----------------------------------------------读取文件------------------------------------------ % 从wav文件读入语音数据&#xff0c;该语音采样率16k&#xff0c;故信号最高频率8k。 [x,fs]audioread(C2_3_y.wav); % 取x的一个通道 xx(:,1)…

Google准备好了吗?OpenAI发布ChatGPT驱动搜索引擎|TodayAI

在科技界波澜壮阔的发展中&#xff0c;OpenAI正式宣布其最新突破——一个全新的基于ChatGPT技术的搜索引擎&#xff0c;旨在直接挑战谷歌在搜索领域的统治地位。这一创新将可能彻底改变用户上网搜索的方式。 据悉&#xff0c;这款AI驱动的搜索引擎利用了ChatGPT的强大功能&…

EasyExcel多行表头带动态下拉框导入导出具体实现

一、准备环境包 maven:<!-- guava本地缓存--> <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>32.1.2-jre</version> </dependency><!--easyexcel依赖--> <dependen…

免费SSL证书?轻松申请攻略来了!

在当今的互联网时代&#xff0c;网络安全已经成为一个不容忽视的重要课题。随着在线交流和交易活动的增加&#xff0c;保护网站和用户信息的重要性日益突显。SSL证书&#xff0c;即安全套接字层证书&#xff0c;它为互联网通信提供了加密服务&#xff0c;确保数据的安全性和完整…

淘宝扭蛋机小程序开发:转动幸运,开启无限惊喜

一、探索未知&#xff0c;开启全新扭蛋体验 淘宝扭蛋机小程序&#xff0c;为您带来一场前所未有的扭蛋盛宴。在这个充满神秘与乐趣的平台上&#xff0c;每一次点击都将引领您走进未知的宝藏世界&#xff0c;每一次旋转都可能揭示出意想不到的惊喜。 二、海量商品&#xff0c;…

Kubernetes 教程:在 Containerd 容器中使用 GPU

原文链接:Kubernetes 教程:在 Containerd 容器中使用 GPU 云原生实验室本文介绍了如何在使用 Containerd 作为运行时的 Kubernetes 集群中使用 GPU 资源。https://fuckcloudnative.io/posts/add-nvidia-gpu-support-to-k8s-with-containerd/ 前两天闹得沸沸扬扬的事件不知道…

3D 交互展示该怎么做?

在博维数孪&#xff08;Bowell&#xff09;平台制作3D交互展示的流程相对简单&#xff0c;主要分为以下几个步骤&#xff1a; 1、准备3D模型&#xff1a;首先&#xff0c;你需要有一个3D模型。如果你有3D建模的经验&#xff0c;可以使用3ds Max或Blender等软件自行创建。如果没…

护眼台灯十大品牌哪个好?热销榜护眼灯十大品牌推荐

护眼台灯十大品牌哪个好&#xff1f;在这篇文章中&#xff0c;我将向大家介绍十大护眼台灯品牌&#xff0c;其中包括书客、松下、飞利浦等知名品牌。我精心挑选这些品牌&#xff0c;旨在为大家提供明智的选择参考。这些品牌的护眼台灯拥有的功能比较多&#xff0c;提供的光线也…

揭秘软胶囊品质的秘密武器:西奥机电CHT-01软胶囊弹性硬度测试仪

揭秘软胶囊品质的秘密武器&#xff1a;西奥机电CHT-01软胶囊弹性硬度测试仪 在医药行业中&#xff0c;软胶囊作为一种常见的药品剂型&#xff0c;因其独特的封装方式和便利性而受到广泛青睐。然而&#xff0c;软胶囊的质量问题也一直是制药企业关注的焦点。为了确保软胶囊的质量…

Qt窗口及QWidget类详解

QtWidgets 模块及窗口基本概念 QWidget 类是所有用户界面对象的基类,QWidget 及其子类是开发桌面应用的核心,这些类都位于 QtWidgets 模块内,注意:QtWidgets 是模块,QWidget 是类(少一个字母 t 和最后的 s)。 部件或窗口部件:Qt 把建立用户界面的元素称为窗口部件(widg…