串的模式匹配
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 }
以上是关于串的模式匹配的主要内容,如果未能解决你的问题,请参考以下文章