当前位置: 首页 > news >正文

27-算法打卡-字符串-找出字符串中第一个匹配项的下标-leetcode(28)-第二十七天

1 题目地址

28. 找出字符串中第一个匹配项的下标 - 力扣(LeetCode)28. 找出字符串中第一个匹配项的下标 - 给你两个字符串 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 。 提示: * 1 <= haystack.length, needle.length <= 104 * haystack 和 needle 仅由小写英文字符组成https://leetcode.cn/problems/find-the-index-of-the-first-occurrence-in-a-string/description/


2 题目说明

给你两个字符串 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 。

提示:

  • 1 <= haystack.length, needle.length <= 104
  • haystack 和 needle 仅由小写英文字符组成

3 解题思路

方式一:暴力方式:两层循环
1、假设字符串haystack长度是m,needle长度是n
2、haystack匹配needle最多需要循环次数是m-n+1
3、第一层循环是最多需要遍历的次数m-n+1,即haystack的起始的索引下标位置
4、第二层循环每次都是从0开始最大到needle长度n,判断两层的指向的字符是否相等,
        不相等:直接跳出第二层循环
        相等:第二层是否遍历到needle的末尾
                是:直接返回第一层索引下标(结果)
                否:上下两层同时向后移动

方式二:KMP(目前还不会后续补充)

4 代码编写


4.1 暴力方式

class Solution {public int strStr(String haystack, String needle) {char[] haystackArray = haystack.toCharArray();char[] needleArray = needle.toCharArray();int haystackLength = haystackArray.length;int needleLength = needleArray.length;// 需要匹配的次数int need = haystackLength - needleLength + 1;for (int i=0; i<need; i++) {int left = i;int needleInit = 0;while (needleInit<needleLength) {// 字符相等if (haystackArray[left] == needleArray[needleInit]) {// 最后一个元素也匹配直接返回if (needleInit == needleLength-1) {return i;}// 否则都向后移动left++;needleInit++;} else {// 不相等,直接跳出本层循环break;}}}return -1;}}

简化上面代码方式:

class Solution {public int strStr(String haystack, String needle) {char[] haystackArray = haystack.toCharArray();char[] needleArray = needle.toCharArray();int haystackLength = haystackArray.length;int needleLength = needleArray.length;// 需要匹配的次数int need = haystackLength - needleLength + 1;for (int i=0; i<need; i++) {int left = i;int needleInit = 0;// 匹配则向后移动while (needleInit<needleLength && haystackArray[left] == needleArray[needleInit]) {left++;needleInit++;}// 最后一个元素也匹配直接返回if (needleInit == needleLength) {return i;}}return -1;}}


4.2 KMP(目前还不会后续补充)

相关文章:

  • 16.磁环在EMC设计中的选型与运用
  • 如何将极狐GitLab 议题导出为 CSV?
  • 【数据结构】_树和二叉树
  • 数据结构算法复杂度介绍
  • uniapp-商城-34-shop 购物车 选好了 进行订单确认
  • SQLMesh 模型选择指南:优化大型项目的模型更新
  • 学习记录:DAY17
  • 第17章:MCP框架构建知识工作助手
  • 【GO语言小案例手记】基于GIN的简易代理网关
  • SQL实战:02之连续数问题求解
  • 基于单片机的游泳馆智能管理系统
  • 借助deepseek和vba编程实现一张表格数据转移到多张工作簿的表格中
  • LVGL在VScode的WSL2中仿真
  • Linux之安装配置Nginx
  • Redis--预备知识以及String类型
  • 【AI 加持下的 Python 编程实战 2_10】DIY 拓展:从扫雷小游戏开发再探问题分解与 AI 代码调试能力(中)
  • 双目视觉中,利用左右图像互补信息来补全彼此缺失区域
  • ETL 数据集成都包含哪些?
  • 【金仓数据库征文】——金仓数据库:国产数据库的卓越之选
  • 开发并发布一个属于自己的包(npm)
  • 公安部知识产权犯罪侦查局:侦破盗录传播春节档院线电影刑案25起
  • 美联储官员:若特朗普高额关税致失业率飙升,将支持降息
  • 民生访谈|马拉松中签率低何解?预付费监管落实得如何?市体育局回应
  • 著名文学评论家、清华大学中文系教授蓝棣之逝世
  • 北京市交通委通报顺平路潮白河大桥事故直接原因
  • 旁白丨无罪后领到国家补偿,一位退休教师卸下了“包袱”