Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include<iostream>#include<string>#include<vector>using namespace std;class KpmPar{string pattern;string::size_type patsize;int *next;public:KpmPar(string pat){pattern=pat;patsize=pat.size();next=new int[patsize+1];next[0]=-1;}~KpmPar(){delete next;}void calnextval(string subpat){/*if(subpat.size()==1){next[1]=0;}else{calnextval(subpat.substr(0,subpat.size()-1));next[subpat.size()]=0;int j=next[subpat.size()-1];while(j>=0&&subpat[subpat.size()-1]!=subpat[j]){j=next[j];}next[subpat.size()]=j+1;}*/