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

数据结构复习4

第四章 串

一些面试题

12. 介绍一下KMP算法。★★★

       KMP算法是一种高效的字符串匹配算法,用于在一个文本串中查找一个模式串的出现位置。KMP算法通过利用模式串自身的信息,在匹配过程中避免不必要的回溯,从而提高匹配效率。

       KMP算法的核心思想是使用一个部分匹配表,也称为next数组,来记录模式串中每个位置的最长公共前后缀的长度。这样,在匹配失败时,可以根据部分匹配表的信息,将模式串向右移动尽可能少的步数。

       KMP算法的时间复杂度O(n+m),朴素算法的时间复杂度O(n*m),n和m是两个串的长度。

-------------------------------------------------------------------------------------------------------------------------

       KMP算法的具体步骤如下:

预处理next数组:对于模式串,遍历每个位置,计算该位置之前子串的最长公共前后缀的长度,并保存到next数组中。
匹配过程:从文本串的起始位置开始,用两个指针分别指向文本串和模式串的当前位置,逐个字符进行比较。
       如果当前字符匹配成功,则两个指针同时向后移动一位。

       如果当前字符匹配失败:

       根据next数组中的信息,将模式串向右移动尽可能少的步数。根据当前失败位置的部分匹配值,向右移动模式串的指针。

       同时,保持文本串的指针不动,继续与模式串的新位置进行比较。

       如果模式串的指针移到末尾,则表示匹配成功,返回在文本串中的起始位置。如果文本串的指针移到末尾,则表示未找到匹配,返回-1。

--------------------------------------------------------------------------------------------------------------------------

KMP算法简述

KMP算法是在简单模式匹配的基础上对串的模式匹配进行优化。

主要的思路是每趟比较过程中让子串先滑动到一个合适的位置。

当发生不匹配时,不同于简单模式匹配的右移一位,而是移动到适合的位置。

这里所移动的位置依靠与NEXT[]数组,求next[]数组的方法是比较前后缀相同元素。

计算机保研/考研面试题——数据结构与算法篇_计算机保研面试 csdn-CSDN博客

面试考点——数据结构篇_数据结构保研面试重点-CSDN博客

相关文章:

  • AWTK-MVVM的一些使用技巧总结(1)
  • 爪形行列式
  • 建造者模式 - Flutter中的乐高大师,优雅组装复杂UI组件!
  • 前后端分离场景下的用户登录玩法Sa-token框架使用
  • 【系统分析师】2021年真题:论文及解题思路
  • XWPFDocument导出word文件
  • 计算机组成原理与体系结构-实验四 微程序控制器 (Proteus 8.15)
  • day46/60
  • Java垃圾收集机制Test
  • Modbus 报文结构与 CRC 校验实战指南(一)
  • 5 c++核心——文件操作
  • 【NLP 实战】蒙古语情感分析:从 CNN 架构设计到模型训练的全流程解析(内附项目源码及模型成果)
  • EPLAN Electric P8 2.9 零基础保姆级安装教程
  • 力扣第84题-柱状图中最大的矩形
  • [Python 基础课程]Python 规范
  • 【QT】信号和槽(1) 使用 || 定义
  • 信号处理分析工具——时频分析(二)
  • python sklearn 机器学习(1)
  • 【C++】C++的虚析构函数
  • Linux基本命令篇 —— head命令