串的模式匹配

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了串的模式匹配相关的知识,希望对你有一定的参考价值。

1.BF模式匹配算法:

 1 int Index(SString S, int pos, SString T)
 2 {
 3     int i = pos, j = 1;
 4     while (i < S.len&&j < T.len)
 5     {
 6         if (S.ch[j] == T.ch[j])
 7         {
 8             i++;
 9             j++;
10         }
11         else
12         {
13             i = i - j + 2;
14             j = 1;
15         }
16     }
17     if (j > T.len) return i - T.len;
18     else return 0;
19 }

 2.KMP算法

 1 int Index_KMP(SString S,int pos,SString T)
 2 {
 3     int i = pos, j = 1;
 4     while (i <= S.len&&j <= T.len)
 5     {
 6         if (j == 0 || S.ch[i] == T.ch[j])
 7         {
 8             ++i;
 9             ++j;
10         }
11         else j = next[j];
12     }
13     if (j > T.len) return i - T.len;
14     else return 0;
15 }

3.next算法

 1 void Get_Next(SString T, int next[])
 2 {
 3     int j = 1, k = 0;
 4     next[1] = 0;
 5     while (j < T.len)
 6     {
 7         if (k == 0 || T.ch[j] == T.ch[k])
 8         {
 9             ++j;
10             ++k;
11             next[j] = k;
12         }
13         else k = next[k];
14     }
15 }

4.nextval算法

 1 void Get_NextVal(SString T, int next[], int nextval[])
 2 {
 3     int j = 1, k = 0;
 4     Get_Next(T,next);  //获得next的值
 5     nextval[1] = 0;
 6     while (j < T.len)
 7     {
 8         k = next[j];
 9         if (T.ch[j] == T.ch[k])
10             nextval[j] = nextval[k];
11         else
12             nextval[j] = next[j];
13         j++;
14     }
15 }

 

以上是关于串的模式匹配的主要内容,如果未能解决你的问题,请参考以下文章

数据结构—串KMP模式匹配算法

第四章学习小结 串的模式匹配 解题心得体会

《数据结构(C语言版)》之“串的模式匹配算法”

求出子串(模式串)的next函数值,利用kmp算法实现模式与主串的匹配算法

2016校招真题之串的模式匹配

第四章:2.串 -- 串的模式匹配算法(KMP)