1. 字符串移位包含问题

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

输入格式

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

输出格式

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

输入样例:

AABCD CDAA

输出样例:

true

#include <algorithm>
#include <iostream>
using namespace std;
int main() {
    string a, b;
    cin >> a >> b;
    if (a.size() < b.size()) swap(a, b);//若a字符串小于b 交换
    for (int i = 0; i < a.size(); i++)
        {
            a = a.substr(1) + a[0];//将字符后移 第一次将AABCD 移动为ABCDA
            for (int j = 0; j + b.size() <= a.size(); j++)
                {
                    int k=0;
                    for ( ; k < b.size(); k++)
                        if (a[j + k] != b[k])
                        break;//不相等提前终止循环
                    if (k == b.size())
                    {
                        puts("true");
                        return 0;
                    }

                }
        }
    puts("false");
    return 0;
}


观摩了一下大佬的。😔

#include <algorithm>
#include <iostream>
using namespace std;
int main(){
    string a,b,c;
    cin>>a>>b;
    if(a.size() < b.size()) swap(a,b);
    a+=a;
    size_t t =a.find(b);   
    if(t != string::npos)puts("true");    
    else puts("false");
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值