Talk is cheap,show me the code.
晚上写原理总结
class Rotation {
public:
bool chkRotation(string A, int lena, string B, int lenb) {
// write code here
A=A+A;
if(lena!=lenb) return false;
if(lena==0) return true;
bool re=findMatch(A,B);
return re;
}
vector<int> getNextArray(string match){
int len=match.size();
vector<int> next(len);
if(len==1){
next[0]=-1;
return next;
}
next[0]=-1;
next[1]=0;
int cn=0;
for(int i=2;i<len;i++){
if(match[i]==match[cn]){
cn++;
next[i]=cn;
}
else if(cn>0){
next[i]=cn;
}
else
next[i]=0;
}
return next;
}
bool findMatch(string str,string match){
int lena=str.size();
int lenb=match.size();
int si=0;
int mi=0;
vector<int> next=getNextArray(match);
while(si<lena&&mi<lenb){
if(str[si]==match[mi]){
si++;
mi++;
}
else if(next[mi]==-1){
si++;
}
else{
mi=next[mi];
}
}
return mi==lenb;
}
};