编程之美--3.1

题目描述:给定s1,s2两个字符串,要求判定s2是否能够被s1做循环移位得到的字符串包含。

思路:类似于面试金典字符串那一节最后一题,字符串拼接的思路,将s1 = s1+s1,这样只要能够移位得到包含s2那么就肯定在拼接后的s1中

 1 #include <iostream>
 2 #include <string>
 3 #include <fstream>
 4 #include <map>
 5 #include <algorithm>
 6 #include <vector>
 7 #include <ctime>
 8 #include <bitset>
 9 #include <stack>
10 #include <deque>
11 #include <stdexcept>
12 #include <memory>
13 
14 using namespace std;
15 
16 int main()
17 {
18     string s1,s2;
19     cin>>s1>>s2;
20     if(s2.length() > s1.length())
21         cout<<"false"<<endl;
22     else
23     {
24         s1 = s1+s1;
25         int i;
26         for(i = 0 ; i <= s1.length()-s2.length() ; ++i)
27         {
28             string tmp = s1.substr(i,s2.length());
29             cout<<tmp<<" "<<s2<<endl;
30             if(tmp == s2)
31             {
32                 cout<<"true"<<endl;
33                 return 0;
34             }
35         }
36         cout<<"false"<<endl;
37     }
38     return 0;
39 }