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

LeetCode[28]找出字符串中第一个匹配项的下标(KMP版本)

思路:

一开始我使用暴力过的,但是感觉还是不完美,想学习一下KMP的写法,所以这篇笔记就来了,首先KMP算法就要先维护一个最长相等前后缀的一个数组(统称前缀表),那么这个数组为什么能找出相等字符串呢?因为这个前缀表是维护了当前模式串最长前后缀,一旦出现不相等的情况,就可以根据不相等的位置的前一个位置的下标的值,就是需要回退的次数。

我的理解就是先想KMP算法的时间复杂度,是O(n+m),那么就是一个串遍历一遍,给出的文本串遍历一遍,给出的模式串遍历一遍,所以通过时间复杂度就知道这道题大概的一个for循环的方向,肯定是先遍历模式串算出前缀表,然后再遍历文本串结合前缀表得出答案。其实这个前缀表就在两个字符串中找相等的字符串。

那么说说前缀表怎么算出来的,遍历模式串,然后再来个双指针,初始的时候,头指针指向前缀的头部,尾指针指向后缀的尾部。(注意:前缀-不包含尾指针就是前缀,后缀-不包含尾指针就是后缀)所以尾指针就是初始为1,头指针为0。

前缀表一共三步:

1.头尾指针不相等,那么说明现在前后缀不一样,那么就让头指针向前退一步,直到两个指针相等。

2. 头尾指针相等的时候,就是说明存在前后缀一样的值了,那么就让头指针往后走一步。

3. 最后就是更新前缀表的值,遍历模式串的是i,所以next[i] = j,j就代表了当前最长相等的前后缀的个数。

通过拿到的前缀表,我们再对文本串进行遍历,就可以得到当前相等串的第一个下标了,详细的看代码和代码随想录的解释。

代码:

class Solution {public int strStr(String haystack, String needle) {if (needle.length() == 0)return 0;int[] next = new int[needle.length()];getNext(next, needle);int j = 0;for (int i = 0; i < haystack.length(); i++) {while (j > 0 && needle.charAt(j) != haystack.charAt(i)) {j = next[j - 1];}if (needle.charAt(j) == haystack.charAt(i)) {j++;}if (j == needle.length()) {return i - needle.length() + 1;}}return -1;}public void getNext(int[] next, String s) {int j = 0;next[0] = 0;for (int i = 1; i < s.length(); i++) {while (j > 0 && s.charAt(j) != s.charAt(i)) {j = next[j - 1];}if (s.charAt(j) == s.charAt(i)) {j++;}next[i] = j;}}
}

 

相关文章:

  • prime-2 靶场笔记(vuInhub靶场)
  • 【含文档+PPT+源码】物联网车辆GPS定位管理系统【
  • Spring Boot之 HttpWebServiceMessageSenderBuilder
  • 《电子类专业:通往科技未来的钥匙》
  • JavaScript爬虫基础篇:HTTP 请求与响应
  • 《突破控件限制:用Qt绘图API解锁高级界面定制能力》
  • ChatGPT语音功能在iPad上支持吗?全面解答!
  • 【仿Mudou库one thread per loop式并发服务器实现】SERVER服务器模块实现
  • 科技快讯 | 智谱开源最新GLM模型系列;“AI 洗头店”现身广州;ChatGPT上线图库功能
  • 虚拟卡可以解决订阅 ChatGPT 时无法付款的问题
  • 基于 ZYNQ MPSOC 异构平台的道路交通目标检测设计,也支持RK3588+FPGA
  • 5.9 《GPT-4调试+测试金字塔:构建高可靠系统的5大实战策略》
  • 当纺织车间遇上“数字魔法”--天拓四方飞鸟物联平台+边缘计算采集网关的智造革命
  • 记录待办事项的便签软件有没有推荐的?
  • TailwindCss快速上手
  • Halcon应用:九点标定-手眼标定
  • 可灵AI进入2.0时代,全新视频生成模式将怎么改变市场?
  • Flutter 从零到一
  • Node.js 文件读取与复制相关内容
  • 自然科技部分详解
  • 展示型网站制作/营销的手段和方法
  • 无忧中英繁企业网站系统 破解/百度怎么推广自己的作品
  • 做类似淘宝的网站设计需要什么/晋江怎么交换友情链接
  • 安徽省建设厅网站人员管理/郑州网络推广服务
  • 为什么广州政府网站做的不好/企业做个网站多少钱
  • 静态网站模板 大气/百度营销登录入口