链接:https://www.nowcoder.com/questionTerminal/687deda2cc57473499e058207f6258cf
来源:牛客网
如果一个字符串为str,把字符串的前面任意部分挪到后面形成的字符串交str的旋转词。比如str=“12345”,str的旋转串有“12345”、“45123”等等。给定两个字符串,判断是否为旋转词。
输入描述:
输出包含三行,第一个两个整数n和m(1≤n,m≤105)(1 \leq n,m \leq10^5 )(1≤n,m≤105),分别表示两个字符串的长度。第二行和第三行各输入一个字符串。
输出描述:
如果两个字符串互为旋转词请输出“YES”,否则输出“NO”。
示例1
输入
4 4
abcd
cdab
输出
YES
示例2
输入
2 3
aa
aaa
输出
NO
备注:
时间复杂度O(n)O(n)O(n),空间复杂度O(n)O(n)O(n)。
思路:相同的两个s1相连接之后,其所有子串中会出现其旋转词。
#include<iostream>
#include <string>
#include <map>
using namespace std;
int main()
{
int a,b;
string s1,s2;
cin >> a >> b;
cin >> s1;
cin >> s2;
if(a != b)
{
cout << "NO" << endl;
return 0;
}
string t = s1;
t += s1;
if(t.find(s2)!= string::npos)
cout << "YES" << endl;
else
cout << "NO" << endl;
return 0;
}