(模板)KMP

来源:互联网 发布:windows live mail打开 编辑:程序博客网 时间:2024/04/29 07:21
char t[mxn], s[mxn];  //t模板串,下标0开始int f[mxn], n;void get_f() {f[0] = f[1] = 0;for(int i = 1; t[i]; ++i) {int j = f[i];while(j && t[i] != t[j]) j = f[j];f[i+1] = t[i] == t[j]? j + 1: 0;}}int calc() {int j = 0, n = strlen(t), ret = 0;for(int i = 0; s[i]; ++i) {while(j && s[i] != t[j]) j = f[j];if(t[j] == s[i]) ++j;if(j == n) ++ret, j = 0;}return ret;}



下标1开始

char t[mxn], s[mxn]; int f[mxn];void get_f() {f[1] = 0;for(int i = 2; t[i]; ++i) {int j = f[i-1];while(j && t[j + 1] != t[i]) j = f[j];f[i] = t[j+1] == t[i]? j + 1: 0;}}int calc() {int ret = 0, j = 0, n = strlen(t + 1);for(int i = 1; s[i]; ++i) {while(j && t[j+1] != s[i]) j = f[j];if(t[j+1] == s[i]) ++j;if(j == n) ++ ret, j = 0;}return ret;}


0 0