class Solution {
public:
int *nex;
void getnex(string s){
int i=0,k=-1;nex[0]=-1;
while(i<s.size()){
if(k==-1||s[i]==s[k]) nex[++i]=++k;
else k=nex[k];
}
}
bool rotateString(string A, string B) {
if(A.size()!=B.size()) return false;//!!! qswl
A=A+A;
nex=new int[B.size()+1],getnex(B);
int i=0,j=0;
int n=A.size(),m=B.size();
while(i<n&&j<m){
if(j==-1||A[i]==B[j]) ++i,++j;
else j=nex[j];
}
return j==m?true:false;
}
};