给你一个文本串 T ,一个非空模板串 S ,问 S 在 T 中出现了多少次
数据范围:
要求:空间复杂度 ,时间复杂度
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 计算模板串S在文本串T中出现了多少次 * @param S string字符串 模板串 * @param T string字符串 文本串 * @return int整型 */ #include <string.h> int ne[100000]; void getNext(char* a, int next[]) { int j = 0; next[0] = 0; for(int i = 1; i < strlen(a); i++) { while(j > 0 && a[i] != a[j]) { j = next[j - 1]; //回到前一个,相当于自身做了一次kmp } if(a[i] == a[j]) { j++; } next[i] = j; } } int kmp(char* S, char* T ) { // write code here int i = 0 , j = 0, count = 0; int slen = strlen(S); int tlen = strlen(T); getNext(S, ne); for(i = 0; i < tlen; i++) { if(j == 0 && tlen - i < slen) break; while(j > 0 && T[i] != S[j]) { j = ne[j - 1]; } if(T[i] == S[j]) { j++; } if(j == slen) { count++; j = ne[j - 1]; } } return count; }还是跑不完,只能跑5组测试用例,数一大还是超时,还望老哥们赐教