2050:【例5.20】字串包含
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 613 通过数: 197
【题目描述】
字符串移位包含问题。
对于一个字符串来说,定义一次循环移位操作为:将字符串的第一个字符移动到末尾形成新的字符串。
给定两个字符串s1s1和s2s2,要求判定其中一个字符串是否是另一字符串通过若干次循环移位后的新字符串的子串。例如CDAA
是由AABCD
两次移位后产生的新串BCDAA
的子串,而ABCD
与ACBD
则不能通过多次移位来得到其中一个字符串是新串的子串。
【输入】
一行,包含两个字符串,中间由单个空格隔开。字符串只包含字母和数字,长度不超过3030。
【输出】
如果一个字符串是另一字符串通过若干次循环移位产生的新串的子串,则输出true
,否则输出false
。
【输入样例】
AABCD CDAA
【输出样例】
true
【参考代码】
C代码:
#include<stdio.h> #include<string.h> #define N 65 char s1[N],s2[N],x[N],t[N]; int main() {int i;scanf("%s %s",s1,s2);if(strlen(s1)<strlen(s2)) // 将短的字符串作为预判字符串 {strcpy(t,s1);strcpy(s1,s2);strcpy(s2,t);}strcpy(x,s1);if(strstr(strcat(s1,x),s2)==NULL)printf("false\n");elseprintf("true\n");return 0; }
C++代码:
#include <iostream> using namespace std; string s1,s2; int main() {cin >> s1 >> s2;if(s1.size()<s2.size())swap(s1,s2);s1=s1+s1;if(s1.find(s2)!=s1.npos)cout << "true" << endl;elsecout << "false" << endl;return 0; }
http://ybt.ssoier.cn:8088/problem_show.php?pid=2050