牛客網(直通BAT面試演算法班) Day1
阿新 • • 發佈:2019-02-20
class Rotation {
public:
bool chkRotation(string A, int lena, string B, int lenb) {
string big = A + A;
if(lena!=lenb)
return false;
return KMP(big,B);
}
const vector<int> * kmp_next(string &m) //找到待匹配串的next陣列
{
static vector<int> next(m.size());
next[0]=0;
int temp;
for(int i=1; i<next.size(); i++)
{
temp=next[i-1];
while(m[i]!=m[temp]&&temp>0)
{
temp=next[temp-1];
}
if(m[i]==m[temp])
next[i]=temp+1;
else next[i]=0;
}
return &next;
}
bool KMP(string text,string m) //匹配串
{
const vector<int> * next=kmp_next(m);
int tp=0;
int mp=0;
for(tp=0; tp<text.size(); tp++)
{
while(text[tp]!=m[mp]&&mp) //遇到不匹配時情況
mp=(*next)[mp-1];
if(text[tp]==m[mp])
mp++;
if(mp==m.size())
{
return true;
}
}
return false;
}
};