Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include <iostream>#include <string>#include <vector>#include <list>#include <stack>#include <queue>#include <set>#include <map>//#include <unordered_set>//#include <unordered_map>#include <algorithm>using namespace std;int kmp(string str, string pat) {vector<int> next(pat.size(), -1);int j = -1;for (int i = 1; i < pat.size(); ++i) {while (j > -1 && pat[i] != pat[j + 1]) j = next[j];if (pat[i] == pat[j + 1]) ++j;next[i] = j;}j = -1;int res = 0;for (int i = 0; i < str.size(); ++i) {while (j > -1 && str[i] != pat[j + 1]) j = next[j];if (str[i] == pat[j + 1]) ++j;if (j == pat.size() - 1) {++res;