标签:style blog http color os ar for sp div
void getFail(string str) { f[0]=0;f[1]=0; for(int i=1;i<str.size();i++) { int j=f[i]; while(j&&str[i]!=str[j]) j=f[j]; f[i+1]=(str[i]==str[j]?j+1:0); } }
getfail函数采用类似动态规划的思想,记录每次应该跳跃到的点。
int KMP(string obj,string ask,int pos) { getFail(ask); int j=0; int n=obj.size(); for(int i=pos;i<n;i++) { while(j&&ask[j]!=obj[i]) j=f[j]; if(ask[j]==obj[i]) j++; if(j==ask.size()) { res++; return i-j+1; } }
匹配的时候直接从f记录的点开始,省去不少麻烦。
@练习题
HDU 3336
POJ 1961
标签:style blog http color os ar for sp div
原文地址:http://www.cnblogs.com/neopenx/p/4004401.html