一、前言
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
这是双指针 Easy 篇中的【28. 实现strStr()】,虽然是一道 Easy 标签的题目,但是字符串匹配作为计算机科学中研究最广泛的问题之一,相关的算法实现也非常多。
本篇文章主要带大家了解 KMP 字符串匹配算法的执行流程以及代码实现。
二、朴素字符串匹配算法
在介绍 KMP 字符串匹配算法之前,首先了解一下朴素字符串匹配算法的实现:
上述代码的思路是:采用 needle 字符串依次与 haystack 字符串中的子串进行匹配,时间复杂度为 O(nm)。
三、KMP 字符串匹配算法
1、KMP 算法执行流程
haystack: aabaaabaaac
needle: aabaaac
以上述 haystack 和 needle 为例,带大家走一遍 KMP 算法执行的流程。
在执行 KMP 字符串匹配算法之前,需要对 needle 进行预处理,计算出 needle 的部分匹配表: