1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| int KMP(string pattern, string str) { int* next = getNext(pattern); int i = 0, j = 0; while (i < str.size()) { if (str[i] == pattern[j]||j==0) { i++;j++; if (j >= pattern.size()) { break; } } else {
j = next[j]; } } delete [] next; if (j == pattern.size()) return i - pattern.size(); else return -1; }
|