【题目】
对字符串的旋转操作描述如下:
例如: str = "123456" str的所有旋转词为:"123456","234561","345612","456123","561234","612345"。
给定两个字符串str1和str2,实现判断str1是否是str2的旋转词。
【举例】
a="1ab2",b="ab12",返回false。
【实现1】
#include <iostream>
#include <string>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
string str1, str2;
getline(cin, str1);
getline(cin, str2);
if (str1 == "" || str2 == "" || str1.size() != str2.size())
{
cout << "false";
return 0;
}
int first = 0;
for (int i = 0; i < str2.size(); i++)
{
if (str2[i] == str1[0])
{
first = i;
break;
}
}
for (int i = 0; i < str1.size(); i++)
{
if (str1[i] != str2[first++])
{
cout << "false";
return 0;
}
if (first == str2.size())
first = 0;
}
cout << "true";
return 0;
}
【实现2】
#include <iostream>
#include <string>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
string str1, str2;
getline(cin, str1);
getline(cin, str2);
if (str1 == "" || str2 == "" || str1.size() != str2.size())
{
cout << "false";
return 0;
}
string str = str2 + str2;
if (str.find(str1) != str.npos)
{
cout << "true";
return 0;
}
else
{
cout << "false";
return 0;
}
}
【知识点】
1、实现1是我自己的思路,而实现2是书本上的思路,比较可知虽然时间复杂度都为O(n),但是书本上的思路是比较巧妙的,其首先将str=str2+str2,例如str2=“abcd”,那么str="abcdabcd",那么任意长度为4的子串都是b的旋转词。
2、C++中find函数的使用(所需头文件#include <algorithm>)