2026/1/8 21:17:01
网站建设
项目流程
做网站前,旅游海外推广网站建设方案,网站开发做美工,转运网站建设KMP算法
KMP算法是一个字符串匹配算法#xff0c;用来在一个主串中高效地查找模式串第一次#xff08;或所有#xff09;出现的位置。简要概括其思想就是主串永远向前走#xff0c;模式串永远有策略地重新对齐。
如果用暴力解#xff0c;每次回退主串指针都会很耗时用来在一个主串中高效地查找模式串第一次或所有出现的位置。简要概括其思想就是主串永远向前走模式串永远有策略地重新对齐。如果用暴力解每次回退主串指针都会很耗时显然为了单单一个字符的匹配失败而回退整个模式串指针和主串指针显然不划算。所以KMP核心思想是当匹配失败时不回退主串指针而是有策略地移动模式串指针。KMP 的核心突破点利用已匹配的信息当模式串匹配到s[ i ]失败时比较指针回退到从s[0]到s[i - 1]这段模式串中前缀与后缀相同的最长长度之后的那个字符。为什么这段模式串的某个前缀与某个后缀相同说明不用回退整个模式串直接让模式串的前缀与主串已匹配的后缀对齐因为已经说明它们相等这样主串永远向前走模式串永远有策略地重新对齐。怎么知道匹配失败模式串到哪里重新对齐呢记录在s[0]到s[i - 1]这段模式串中的前后缀相同的最长长度用一个next数组next[ i ]存储下标0到下标 i - 1 的前后缀信息。假设next[ i ] n则前n个字符已经默认匹配成功所以从这个长度的后面一个字符开始即可。相关习题LeetCode 28.找出字符串中第一个匹配项的下标LeetCode 459.重复的子字符串