KMP的详解见:https://segmentfault.com/a/1190000008575379
主要难点在于Next数组的理解,KMP是不需要回溯的匹配算法。
1 #include2 #include 3 #include 4 #define MAXSIZE 100 5 using namespace std; 6 /*为方便理解算法,使用全局变量减少参数传递*/ 7 string T,P; 8 vector Next(MAXSIZE); 9 10 void getNext();//获取带匹配字符串P的Next数组 11 int KMP();//返回匹配结果,若P为T的子串则返回匹配成功的T的下标,反之返回-1 12 13 int main()14 {15 cout<<"Text : ";16 getline(cin,T);//读取整行字符串,包括空格 17 cout<<"Part : ";18 getline(cin,P);19 int index=KMP();20 printf("index = %d\n",index);21 return 0;22 }23 24 int KMP()25 {26 int i=0,j=0;27 int n=T.size(), m=P.size();//s.size()的返回值是unsigned类型,必须转为整型变量 28 getNext();29 while(i