例如:给定s1 = AABCD和s2 = BCDAA,返回1,
给定s1=abcd和s2=ACBD,返回0.
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
AABCD右旋一个字符得到DAABC
AABCD右旋两个字符得到CDAAB
分析题目之后我们发现,一个字符串有左旋转和右旋转两种。左旋转之后的字符串在原字符串拼接后的新字符串中;右旋转之后的字符串拼接之后可以找到源字符串。
这里我们会使用两个库函数strncat和strstr,关于两个函数的定义请自己查找。
字符串查找部分:
void circle(char *dest, const char *src){ assert(dest); assert(src); strncat(dest,dest, strlen(dest)); //被查找的字符串拼接 if (NULL == strstr(dest, src)){ //查找字符串,找到返回第一次出现的地址 return 0; //否则返回NULL } else return 1; }
完整代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
#include<string.h>
void circle(char *dest, const char *src){
assert(dest);
assert(src);
strncat(dest,dest, strlen(dest));
if (NULL == strstr(dest, src)){
printf("不是旋转字符串\n");
}
else
printf("是旋转字符串\n");
}
int main(){
char arr[13] = "abdgef"; //测试左旋转
char brr[] = "dgefab";
char crr[13] = "efabdg"; //测试右旋转
char drr[] = "abdgef";
char err[] = "addgef"; //测试找不到
circle(arr,brr);
circle(crr, drr);
circle(arr, err);
return 0;
}