kmp模板

来源:互联网 发布:织梦404页面制作 编辑:程序博客网 时间:2024/05/19 05:29
#include <iostream>#include <cstdio>#include <cstring>#include <set>using namespace std;void getf(char* P, int* f)  {  int m = strlen(P);      f[0] = 0;      f[1] = 0;      for(int i = 1; i < m; i++) {            int j = f[i];          while(j && P[i] != P[j]) {                  j = f[j];          }                  f[i + 1] = P[i] == P[j] ? j+1 : 0;              }  }        int kmp(char* T, char*P, int pos) {      int n = strlen(T);int m = strlen(P);  int f[100005];    getf(P, f);      int j = 0;      for(int i = pos; i < n; i++)      {          while(j && P[j] != T[i]) {              j = f[j];          }          if(P[j] == T[i]) {              j++;          }          if(j == m) {              return i - m + 1;          }      }      return -1;  }  int main() {char a[] = "abcdefghijk";char b[] = "defgh";int pos = kmp(a, b, 0);cout << pos << endl;return 0;}


0 0
原创粉丝点击