对于一个字符串来说,定义一次循环移位操作为:将字符串的第一个字符移动到末尾形成新的字符串。
给定两个字符串 s1 和 s2,要求判定其中一个字符串是否是另一字符串通过若干次循环移位后的新字符串的子串。
例如 CDAA 是由 AABCD 两次移位后产生的新串 BCDAA 的子串,而 ABCD 与 ACBD 则不能通过多次移位来得到其中一个字符串是新串的子串。
输入格式
共一行,包含两个字符串,中间由单个空格隔开。
字符串只包含字母和数字,长度不超过 30。
输出格式
如果一个字符串是另一字符串通过若干次循环移位产生的新串的子串,则输出 true,否则输出 false。
输入样例:
复制代码
1AABCD CDAA
输出样例:
复制代码
1true
c++代码:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28#include<iostream> #include<algorithm> using namespace std; int main() { string a,b; cin>>a>>b; if(a.size()<b.size()) swap(a,b); for(int i=0;i<a.size();i++) { a=a.substr(1)+a[0]; for(int j=0;j+b.size()<=a.size();j++) { int k=0; for(k=0;k<b.size();k++) { if(a[j+k]!=b[k]) break; } if(k==b.size()) { cout<<"true"; return 0; } } } cout<<"false"; return 0; }
c语言代码:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30#include<stdio.h> #include<string.h> int xiaochou(int len,char a[],char b[]) { char c; for(int i=0;i<len;i++) { c=a[0]; for(int j=0;j<len-1;j++) { a[j]=a[j+1]; } a[len-1]=c; if(strstr(a,b)!=NULL) return 1;//strstr函数用来判断字符串是否包含另一个字符串,不包含返回 NULL } return 0; } int main() { char ch[200],q[200]; scanf("%s%s",ch,q); int len1=strlen(ch); int len2=strlen(q); int k; if(len1>=len2) k=xiaochou(len1,ch,q); else k=xiaochou(len2,q,ch); if(k==1) printf("true"); else printf("false"); return 0; }
最后
以上就是斯文夏天最近收集整理的关于字符串移位包含问题(c/c++)的全部内容,更多相关字符串移位包含问题(c/c++)内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复