AcWing 776. 字符串移位包含问题
原题链接
简单
作者:
geekmartin
,
2025-04-04 15:55:50
· 山东
,
所有人可见
,
阅读 2
version 1 手动实现全部
#include <iostream>
using namespace std;
int main()
{
string s1, s2, tp;
cin >> s1 >> s2;
if(s1.size()<s2.size())
{
tp = s1;
s1 = s2;
s2 = tp;
}
int q, i, j, k, t;
for(q = 0; q < s1.size(); q ++)
{
auto c = s1.back();
for(i = s1.size()-1; i >= 0; i --) s1[i] = s1[i - 1];
s1[0] = c;
for(j=0; j<s1.size(); j++)
{
k = j;
t = 0;
while(s1[k] == s2[t] && t < s2.size())
{
k ++;
t ++;
}
if(t == s2.size())
{
cout << "true";
return 0;
}
}
}
cout << "false";
return 0;
}
version 2 优化循环过程,优化比较过程
#include <iostream>
using namespace std;
int main()
{
string s1, s2, tp;
cin >> s1 >> s2;
if(s1.size()<s2.size())
{
tp = s1;
s1 = s2;
s2 = tp;
}
for(int i = 0; i < s1.size(); i++)
{
s1 = s1.substr(1) + s1[0];
for(int j = 0; j + s2.size() <= s1.size(); j ++)
{
int k;
for(k = 0; k < s2.size(); k ++)
if(s1[j + k] != s2[k])
break;
if(k == s2.size())
{
puts("true");
return 0;
}
}
}
puts("false");
return 0;
}