首页 > 代码库 > 串的模式匹配
串的模式匹配
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 }
串的模式匹配
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。