在计算机科学中,一个串是一种有序的字符序列,也称为字符串。在前端开发中,我们经常需要处理字符串,比如对用户输入的文本进行校验或提取其中的关键信息。了解串的基础知识和常用算法可以帮助我们更好地处理字符串。
串的朴素匹配算法(BF)
串的朴素匹配算法(Brute-Force Algorithm),也称为暴力匹配算法,是最简单直观的字符串匹配算法。该算法从目标串的第一个字符开始扫描,逐个比较目标串和模式串的每个字符是否相等,如果不同则继续扫描下一个位置,直到找到匹配的子串或者目标串扫描完毕。
以下是朴素匹配算法的 JavaScript 实现:
-------- ---------------- -------- - ----- - - -------------- ----- - - --------------- --- ---- - - -- - -- - - -- ---- - --- - - -- ----- -- - - -- -------- - -- --- ----------- - ---- - -- -- --- -- - ------ -- - - ------ --- -
上述实现中,bfSearch
函数接收两个参数,分别表示目标串和模式串。函数首先获取目标串和模式串的长度,然后从目标串的第一个字符开始遍历,对于每个位置,都逐个比较目标串和模式串的字符是否相等。如果找到了匹配的子串,则返回该子串在目标串中的起始位置,否则返回 -1。
朴素匹配算法的时间复杂度为 O(n * m),其中 n 和 m 分别表示目标串和模式串的长度。由于需要对每个位置进行全匹配,因此该算法的效率较低,适用于字符串较短或者匹配要求不严格的场景。
串的KMP算法
KMP算法是一种高效的字符串匹配算法,它采用了不回溯的方式进行匹配。该算法首先预处理模式串,构建一个部分匹配表(Partial Match Table),然后在匹配目标串时根据部分匹配表直接跳过已经匹配过的前缀,避免重复匹配。
以下是KMP算法的JavaScript实现:
-------- ----------------- -------- - ----- - - -------------- ----- - - --------------- ----- ---- - ----------------- --- - - -- - - -- ----- -- - - -- - - -- - -- -- --- -- -- --------- --- ----------- - ---- ---- - ---- - - - -------- - - -- -- --- -- - ------ - - -- - ---- - ------ --- - - -------- ---------------- - ----- - - --------------- ----- ---- - --- --------- --- - - -- - - --- ------- - --- ----- -- - - - -- - -- -- --- -- -- ---------- --- ----------- - ---- ---- ------- - -- - ---- - - - -------- - - ------ ----- -
上述实现中,kmpSearch
函数调用了 getNext
函数来获取模式串的部分匹配表。具体实现过程如下:
- 初始化
next[0] = -1
,i=0
,j=-1
。 - 对于每个
i
,计算对应的next[i]
值。如果j=-1
或
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/3410