字符串移位包含问题

小王于2022-04-09发布在亲友圈 / 被围观925次

题目描述

对于一个字符串来说,定义一次循环移位操作为:将字符串的第一个字符移动到末尾形成新的字符串。 给定两个字符串 s1 和 s2,要求判定其中一个字符串是否是另一字符串通过若干次循环移位后的新字 符串的子串。例如 CDAA 是由 AABCD 两次移位后产生的新串 BCDAA 的子串,而 ABCD 与 ACBD 则不能 通过多次移位来得到其中一个字符串是新串的子串。

输入描述

一行,包含两个字符串,中间由单个空格隔开。字符串只包含字母和数字,长度不超过 30。

输出描述

如果一个字符串是另一字符串通过若干次循环移位产生的新串的子串,则输出 true,否则输出 false。

样例输入

AABCD CDAA

样例输出

true

题解

cpp

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cctype>
using namespace std;
int main()
{
    string s1,s2;
    cin >> s1 >> s2;
    if (s2.size() > s1.size())
        swap(s2,s1);
    s1 += s1;
    for (int i = 0;i < s1.size();i++)
    {
        string s = "";
        for (int j = i;j < i + s2.size() && j < s1.size();j++)
             s += s1[j];
        if (s == s2)
        {
            cout << "true";
            return 0;
        }
    }
    cout << "false";
    return 0;
}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注