Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include <iostream>#include <string>using namespace std;int *getNext(string pattern){int size = pattern.length();int *next = new int[size];next[0] = 0;int j = 0;//之前一个nextfor(int i = 1;i<size;i++){while(j>=1&&pattern[j]!=pattern[i]){//寻找匹配最大前缀j = next[j-1];}if(pattern[j]==pattern[i]){j++;next[i] = j;}else//未匹配到next[i] = 0;}return next;}/************************************************************************//* 返回匹配的次数 *//************************************************************************/int matchNum(string s, string pattern){int result = 0;int *next = getNext(pattern);int p = 0;//p为当前要匹配的for(int i = 0;i<s.length();i++){while(p>0 && s[i]!=pattern[p]){//包含p==pattern.length()的情况p = next[p-1];