Simpliciy + KMP + BM 字符串搜索算法
Posted Archibald Witwicky
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Simpliciy + KMP + BM 字符串搜索算法相关的知识,希望对你有一定的参考价值。
Simplicity
#include <stdio.h> #include <string.h> int simplicity(char *s, char *t, int pos); int simplicity(char *s, char *t, int pos) { int slen = strlen(s); int tlen = strlen(t); int i = pos; int j = 0; while(i < slen && j < tlen) { if(s[i] == t[j]) { i++; j++; } else { i = i - j + 1; j = 0; } } // subscripts start at 0 : j == len // subscripts start at 1 : j > len if(j == tlen) { return i - j; } return -1; } int main() { int pos = 0; char *s = "goodgoogle"; char *t = "goog"; printf("{s:‘%s‘, t:‘%s‘, pos:‘%d‘, result(subsripts start at 0):‘%d‘}\n", s, t, pos, simplicity(s, t, pos)); return 0; }
KMP
#include <stdio.h> #include <string.h> void get_nextSubscripts(char *t, int *next); int kmp(char * s, char *t, int pos); void get_nextSubscripts(char *t, int *next) { int tlen = strlen(t); int i = 0; // suffix int j = -1; // prefix next[0] = -1; while(i <= tlen) { if(j == -1 || t[i] == t[j]) { i++; j++; if(t[i] == t[j]) { next[i] = next[j]; } else { next[i] = j; } } else { j = next[j]; } } } int kmp(char *s, char *t, int pos) { int next[255]; int slen = strlen(s); int tlen = strlen(t); int i = pos; int j = -1; get_nextSubscripts(t, next); while(i < slen && j < tlen) { if(j == -1 || s[i] == t[j]) { i++; j++; } else { j = next[j]; } } if(j == tlen) { return i - j; } return -1; } int main() { int pos = 0; char *s = "goodgoogle"; char *t = "goog"; printf("{s:‘%s‘, t:‘%s‘, pos:‘%d‘, result(subsripts start at 0):‘%d‘}\n", s, t, pos, kmp(s, t, pos)); return 0; }
BM
以上是关于Simpliciy + KMP + BM 字符串搜索算法的主要内容,如果未能解决你的问题,请参考以下文章