判断两个字符串是否互为旋转词2019-11-20

链接:https://www.nowcoder.com/questionTerminal/687deda2cc57473499e058207f6258cf

string::npos的解释

来源:牛客网

如果一个字符串为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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值