给定两个字符串s1和s2 要求判定s2是否能够被通过s1作循环移位 得到的字符串包含 假设给定s1=AABCD s2=CDAA 返回true 给定s1=ABCD s2=ACBD false
方法1:穷举法
将长度为N的s1移动N次 每次移动1为 查看是否包含s2
方法2:
将长度为N的s1移动N次 保留每次前面移动的数据
如s1=ABCD
ABCD->ABCDA->ABCDAB->ABCDABC->ABCDABCD
那么ABCDABCD=s1s1=s
那么我们只需要查看s中是否包含s2
相较于方法1 利用了提高空间复杂度来换取时间复杂度降低
#include <iostream>
#include <string>
#include <string.h>
using namespace std;
int main()
{
string s1="ABCD";
string s2="BCA";
string ss;
ss=s1+s1;
if(strstr(ss.c_str(),s2.c_str())!=NULL)
cout<<"true"<<endl;
else
cout<<"false"<<endl;
return 0;
}