-
判断两个字符串是否为旋转词
【题目】如果一个字符串str,把字符串str前面的部分挪到后面形成的字符串叫做str的旋转词,比如str=”12345”,str的旋转词有”12345”,”23451”,”34512”,”45123”,”51234”,给定两个字符串a和b,请判断a和b是否互为旋转词。
【要求】解法时间复杂度0(N)
分析:
这道题考察的是一个字符串的查找的小技巧,我们就举str1 = "1234abcd", str2 = "34abcd12", 这个例子。首先string s = str1 +
str1, 那么s中所存储的字符串
内容就是1234abcd1234abcd,接着我们需要在s这个字符查找,str2是不是s的子串就可以了,如果是,则返回true,否则返回
false。
6 #include<iostream>
7 #include<string>
8 using namespace std;
9 bool rotate(string s1,string s2)
10 {
11 if(s1.size() == 0 || s2.size() == 0 || s1.size() != s2.size())
12 return false;
13 string s = s1 + s1;
14 int res = s.find(s2);
15
16 return res != -1;//若find函数没找到相同的字符串则返回-1
17 }
18 int main(int argc, char *argv[])
19 {
20 string s1 = "abcd";
21 bool s2 = rotate(s1, "cdba");
22 cout<<s2<<endl;
23 return 0;
24 }