经典笔试题—— 判断两个字符串是否为旋转词

  1. 判断两个字符串是否为旋转词

【题目】如果一个字符串str,把字符串str前面的部分挪到后面形成的字符串叫做str的旋转词,比如str=”12345”,str的旋转词有12345”,”23451”,”34512”,”45123”,”51234”,给定两个字符串ab,请判断ab是否互为旋转词。

【要求】解法时间复杂度0(N)


               如果a和b长度不一样,那么a和b必然不互为旋转词,可以直接返回false。当a和b长度一样,都为N时>    ,要求解法的时间复杂度为O(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 }




猜你喜欢

转载自blog.csdn.net/csdn_wanziooo/article/details/77007641