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; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)