代码:
vector<int> nxt(goal.size(), 0);
int i=1, j=0;
// 求next数组
for(; i<goal.size(); ++i){
while(j>0 && goal[i] != goal[j]){
j = nxt[j-1];
}
if(goal[i] == goal[j]){
++j;
}
nxt[i] = j;
}
string rhs = s+s;
j = 0;
for(i = 0; i<rhs.size(); ){
if(rhs[i] == goal[j]){
++j; ++i;
if(j == goal.size()){
// 已经匹配成功
}
}else{
if(j > 0)
j = nxt[j-1];
else
++i;
}
}