栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

776. 字符串移位包含问题

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

776. 字符串移位包含问题

776. 字符串移位包含问题

对于一个字符串来说,定义一次循环移位操作为:将字符串的第一个字符移动到末尾形成新的字符串。

给定两个字符串 s1 和 s2,要求判定其中一个字符串是否是另一字符串通过若干次循环移位后的新字符串的子串。

例如 CDAA 是由 AABCD 两次移位后产生的新串 BCDAA 的子串,而 ABCD 与 ACBD 则不能通过多次移位来得到其中一个字符串是新串的子串。

输入格式
共一行,包含两个字符串,中间由单个空格隔开。

字符串只包含字母和数字,长度不超过 30。

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

输入样例:

AABCD CDAA

输出样例:

true

思路
假设输入的两个字符串分别为a,b;且b为a的一个子串,由于题目所给的字符串的长度为30,较小,所以,我们直接将a += a;,然后再从a中查找是否有子串b
这个查找的地方我用的是a.find(b)函数,如果在a中查找到了b那么将返回第一个相同字符在a中的下标

AC代码

#include
#include
#include
#include
#include
#include
#include
#include

using namespace std;
typedef long long ll;
const int N=100010;

int main()
{
	string a, b;
	cin >> a >> b;
	int lena = a.length();
	int lenb = b.length();
	if(a.length() > b.length())
	{
		a += a;
		if(a.find(b) >= 0 && a.find(b) < lena) cout << "true";
		else cout << "false";
	}
	else
	{
		b += b;
		if(b.find(a) >= 0 && b.find(a) < lenb) cout << "true";
		else cout << "false";
	}
	return 0;
}



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/702797.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号