每日一言
知识有两种,
一种是你知道的,
一种是你知道在哪里能找到的
-塞缪尔·约翰逊
题目
判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 =AABCD 和 s2 = BCDAA,返回1
给定s1=abcd和s2=ACBD,返回0.
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
AABCD右旋一个字符得到DAABC
解法思路
法一
- 先求字符串长度
- 左旋1个字符
- 判断两个字符串是否相等
- 如果不相等,重复2,3。直到整个字符串完全左旋
如果相等,则返回1,
如果完全左旋后不相等,则返回0
代码实现
#include<stdio.h>
#include<string.h>
int main()
{
char s1[100] = "";
char s2[100] = "";
gets(s1);
gets(s2);
int i = 0;
int flag = 1;
size_t sz = strlen(s1);
for (i = 0; i < sz-1; i++)
{
if (strcmp(s1, s2)==0)
{
flag = 0;
printf("1");
break;
}
int j = 0;
char tmp = s1[0];
for (j = 1; j < sz; j++)
{
s1[j - 1] = s1[j];
}
if (j == sz)
s1[sz - 1] = tmp;
}
if (flag)
{
printf("0");
}
return 0;
}
法二
- 创建新的临时字符数组tmp,并将数组s1中的元素复制到数组tmp中
- 然后将s1数组链接在tmp中
- 接着在数组tmp中查找是否有子数组s2
代码实现
#include<stdio.h>
#include<string.h>
int main()
{
char s1[1000] = { 0 };
char s2[1000] = { 0 };
char tmp[1000] = { 0 };
gets(s1);
gets(s2);
strcpy(tmp, s1);//复制s1到tmp中
strcat(tmp, s1);//连接s1到tmp中
if (strstr(tmp, s2))
printf("1");
else
printf("0");
return 0;
}
结语
请给自己些耐心,一口吃不成胖子。
山外青山楼外楼,莫把百尺当尽头。
想成为大佬那就保持空杯心态加油努力吧!
都看到这里啦!真棒(*^▽^*)
可以给作者一个免费的赞赞吗,这将会鼓励我继续创作,谢谢大家
编程小白写作,如有纰漏或错误,欢迎指正