class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 计算模板串S在文本串T中出现了多少次 * @param S string字符串 模板串 * @param T string字符串 文本串 * @return int整型 */ int kmp(string s, string t) { // write code here int n = s.size(), m = t.size(); s = ' ' + s, t = ' ' + t; int ne[n + 10]; memset(ne, 0, sizeof ne); for (int i = 2, j = 0; i <= n; i ++) { while (j && s[j + 1] != s[i]) j = ne[j]; if (s[j + 1] == s[i]) j ++; ne[i] = j; } int ans = 0; for (int i = 1, j = 0; i <= m; i ++) { while (j && s[j + 1] != t[i]) j = ne[j]; if (s[j + 1] == t[i]) j ++; if (j == n) ans ++; } return ans; } };
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 计算模板串S在文本串T中出现了多少次 * @param S string字符串 模板串 * @param T string字符串 文本串 * @return int整型 */ int kmp(char* S, char* T ) { // write code here int a,i,j,n=0; a=strlen(S); for(i=0;T[i]!='\0';i++) { for(j=0;j<a;j++) { if(S[j]!=T[i+j]) { break; } } if(j>=a) { n++; } } return n; }