#includeusing namespace std;#include typedef struct{char ch[1000002] = {' '};int length;}sstring;//定义ADTsstring来表示字符串的性质 char temp[1000002]={' '}; void cinstring(sstring &s,char temp[]);//输入主串和模式串,实现字符串下标表示位置 void getnext(sstring t,int next[]);//实现模式串的回溯 int kmpcompare(sstring s, sstring t,int next[]);//使用KMP算法进行匹配,返回pos,通过pos的数值判断是否匹配成功int main(){ sstring s,t; int flag=0; cin>>temp; cinstring(s,temp); cin>>temp; cinstring(t,temp);//分别读入主串和模式串 int next[t.length+1]={0}; getnext(t,next); kmpcompare(s,t,next); flag = kmpcompare(s,t,next);//用flag表示匹配成功后的位置或者匹配不成功的0; cout< t.length) pos = i-t.length; return pos; }
1.初步体会到了更优算法对数据量大的测试的重要作用。
2.一开始我将temp[1000002]定义在主函数内,结果不能运行,定义成全局变量之后问题迎刃而解。原因如何我已发邮箱问老师,知晓结果后再做总结。
3.在理解求next[j]算法时,我体会到了用画图法分析有助于直观地认识算法本质,这对于理解复杂想法作用极大。