串的匹配算法:对主串的每一个字符作为开头,作与要匹配的字符串的长度的小循环,直到匹配成功或全部遍历完为止。
KMP模式匹配算法:(就是一种在一个字符串中定位另一个串的高效算法。简单匹配算法的时间复杂度为O(m*n);KMP匹配算法,可以证明它的时间复杂度为O(m+n)。)
具体方法为:若主串为S[m],子串为T[n],当第一次搜索到S[i],T[i]不等后,S下标不是回溯到1,T下标也不是回溯到开始,而是根据T中T[i]对应的next值在数值上所对应的下标位上的字符和S[i]再直接进行比较,如果相等,再在当前比较的下标数值基础上数值加一,直至与T中最后一个字符相等为止。否则T回溯到开始,继续和S[i+1]开始新一轮比较。
下边说一下next数组值推导和nextval数组值推导方法
**
例子:
模式串: a b a a b c a c
next值 0 1 1 2 2 3 1 2
nextval值: 0 1 0 2 1 3 0 2
- Next数组值推导:
第一位的next值为0;第二位的next值为1;后边各位对应的next值要看此位前面的子串情况,如果子串前后缀一个字符相等,k值为2,两个字符相等,k值为3,n个相等k值为n+1;否则为1。
- Nextval数组值推导:
最简单的方法就是,先把其对应的next值写下来,第一位的nextval值为0;第二位的nextval值要看第二位对应的next值(仅仅只在数值上)所对应的位上的字符与当前位的字符进行比较,如果相同,则当前位的nextval和那个字符所在位对应的nextval一致,如果不同,则当前位的nextval值和当前位的next值相同;后边各位对应的nextval值同第二位的原理。