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

LeetCode--28.找出字符串中第一个匹配项的下标(字符串/KMP算法)

28.找出字符串中第一个匹配项的下标

题目描述

给你两个字符串haystackneedle,请你在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
  • haystackneedle仅由小写英文字符组成

解题思路

利用KMP算法:

其核心步骤为:

1、根据模式串T,求出next数组

2、利用next数组进行匹配(主字符串指针不回溯)

next数组步骤:


代码

classSolution{publicvoidgetNext(Strings,int[]next){// 初始化intj=-1;next[0]=j;for(inti=1;i<s.length();i++){// 最长前缀和最长后缀不匹配// 这里只关注第i个字符左侧字符串(不包含i)的前后缀while(j>=0&&s.charAt(i-1)!=s.charAt(j)){// 回退j=next[j];}// 匹配成功(默认j=-1为通配符,均匹配成功)j++;next[i]=j;}}publicintstrStr(Stringhaystack,Stringneedle){// 初始化next数组int[]next=newint[needle.length()];getNext(needle,next);// 初始化i,jinti=0;intj=0;while(i<haystack.length()&&j<needle.length()){if(haystack.charAt(i)==needle.charAt(j)){i++;j++;}else{// 若不匹配,i不变,通过next[j]找已匹配的子串while(j>=0&&haystack.charAt(i)!=needle.charAt(j)){// 回退j=next[j];}i++;j++;}}if(j==needle.length())returni-j;return-1;}}
http://www.jsqmd.com/news/630067/

相关文章:

  • 避开这3个坑!LangSmith提示词管理最佳实践(含Hub使用技巧)
  • 从零到一:Dify工作流实战指南,快速构建AI应用开发流水线
  • MYCIN医疗诊断系统揭秘:50年前的产生式规则如何影响现代AI?
  • 告别像素模糊!VTracer:让任何图片都能无限放大的开源神器
  • 麒麟服务器V10 SP3下Redis开机自启的3种方法(附systemd常见问题排查)
  • 终极指南:如何在浏览器中无需安装直接查看PPT文件 - PPTXjs完整教程
  • 别再被湍流模型搞晕了!用Python从零实现一个超简单的DNS求解器(附完整代码)
  • Simulink VSG虚拟同步机控制技术及其离网与构网型应用研究模型分析:包含直流侧储能电池...
  • Kingbase V8R6 许可证续期实战:从告警到恢复的完整操作指南
  • c++如何将文件从C盘移动到D盘_rename跨文件系统失败处理【进阶】
  • Vue.js中Patch过程处理Teleport组件挂载位置的特殊逻辑
  • GraphSAGE为什么比GCN更适合推荐系统?详解Inductive Learning的工业价值
  • SteamAutoCrack:一键解锁Steam游戏离线运行的终极方案
  • SpringBoot集成Quartz(v2.3.2)任务调度失效问题排查指南
  • 告别命令行!Vue UI图形化工具+ElementUI插件安装全流程(含Idea配置避坑指南)
  • 基于STC89C52RC与OLED12864的《贪吃蛇》游戏开发与性能优化
  • Matlab仿真三机并联风光混合储能并网系统的波形正确性与结构完整性研究
  • STC15单片机RAM优化实战:如何用Keil的data/idata/xdata提升程序效率
  • 保姆级教程:用Depth Anything V3从手机照片生成3D高斯模型(附完整代码)
  • 终极AI图像增强神器:Upscayl完整使用指南与实战教程
  • 别再只盯着波特率了!手把手教你为你的Arduino/STM32项目选择合适的串口参数(含校验位与传输距离实战)
  • FPGA实战:手把手教你配置7系列Block RAM的三种写入模式(WRITE_FIRST/READ_FIRST/NO_CHANGE)
  • IIS各个版本介绍
  • Unidbg模拟JNI调用时参数传递的继承链陷阱
  • Jetson 启动视觉定制全攻略:从cboot到桌面背景的深度修改
  • ComfyUI+Stable Audio Open实战:5分钟搞定游戏音效生成(附完整参数配置)
  • 零基础掌握Windows风扇智能控制:FanControl让你的电脑更安静更高效
  • OpenClaw 性能优化:本地执行效率与资源占用调优实践
  • CSS如何实现文字环绕图片效果_利用float实现图文混排
  • 突破性5步法:重塑你的Obsidian Dataview工作流