KMP字符串匹配算法

参考:

别再暴力匹配字符串了,高效的KMP才是真的香!

算法思想:

  • KMP匹配算法

  暴力匹配的算法是主串 与模式串挨个字符对比,不同时,主串起始点加一,模式串从0开始挨个字符对比。--m*n

  而KMP的意思是,当某个字符不匹配时,前面都是匹配的,只要知道了模式串的最长前缀串,那么前面不用再次比较了,只需要把匹配串的指针移动到最长前缀串后一位就可以继续比较了。--m+n

  • 查找最长公共前后缀的算法

起始时j指向0,i指向j+1。 若array i 与array j相同时,next i = j+1;i++,j++。 

若不同时,则将j= next[j-1]  一直到j=0 为止。继续比较----这里比较难得理解

 

 这里我的理解是为啥 arr j != arr i 时,需要将j移动到profix[j-1]

因为 当arr j != arr i 时 ,此时 他们的前面肯定是匹配的,只到这里才不匹配,而j-1 时的最长前缀正好就对应着和 i-1是匹配的,所以只需要移动j=profix[j-1]

 

posted @ 2021-10-26 19:44  弱水三千12138  阅读(53)  评论(0)    收藏  举报