Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include <iostream>#include <string>using namespace std;int kmp(const string &s, const string &p) {const int N = s.length();const int M = p.length();if ( M == 0 ) return 0;int skips[M];skips[0] = -1;int i = 1;int j = skips[i - 1];while ( i < M ) {if ( j < 0 ) {skips[i ++] = j = 0;} else if ( p[i - 1] == p[j] ) {skips[i ++] = ++ j;} else {j = skips[j];}}int count = 0;i = j = 0;while ( i < N ) {if ( j < 0 ) {i ++;j = 0;