如果有一个字符串str,把字符串str前面任意的部分挪到后面去形成的字符串叫做str的旋转词。比如 str=”1234”,str的旋转词有“1234” 2341 3412 4123
给定两个字符串a和b 请判断a和b是否互为旋转词
思路:
最优解复杂度为O(N)
判断str1 与str 2是否长度相等
如果长度相等 生成str1+str12的大字符喘
用KMP 算法判断大字符串中是否含有str2.
#include<iostream>
#include<string>
using namespace std;
class Rotation {
public:
bool chkRotation(string A, int lena, string B, int lenb) {
// write code here
if(lena != lenb)
return false;
string C = A+A;
if(C.find(B)!=string::npos) //nops表示size_t的末尾
return true;
else
return false;
}
};
int main()
{
string A="abcd";
string B="bcda";
Rotation roa;
if(roa.chkRotation(A,4,B,4))
{
cout<<"true";
}
else
{
cout<<false;
}
}