例如:给定s1 =AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.
这一题并不难,和我之前写的一篇博客有点类似https://blog.csdn.net/question_mark/article/details/99871492
(实现一个函数,左旋字符串的k个字符)
这道题的思路如下:
- 例如这里我们要判断s2是否为s1旋转得到的
- 我们可以将s1这个字符串依次左旋一个字符,并且与s2判断是否相等,不等的话再左旋一个字符,直到遍历完整个字符串。
- 使用strcmpy判断两个字符串是否相等。
- 这里需要注意,左旋右旋都是可以判断的,因为他是对称的。
具体的代码如下:
void reverse(char* start, char* end){
char tmp = 0;
while (start <= end){
tmp = *start;
*start = *end;
*end = tmp;//传指针的方式,逆置字符串
start++;
end--;
}
}
void leftturn(char* src, int k){
//将字符串左旋k个字节
reverse(src, src + k - 1);
reverse(src + k, src + strlen(src) - 1);
reverse(src, src + strlen(src) - 1);
}
int Isreverse(char* str1, char* str2,int size){//str2是不是str1旋转的字符
for (int i = 1; i <= size ; i++){
if (strcmp(str1, str2) == 0){
//两个字符串相等
return 1;
}
else{
leftturn(str1, 1);
//依次左旋一个字节
}
}
return 0;
//将str1都左旋了一遍,也都和str2不相等,返回0;
}
int main(){
//s1 =AABCD和s2 = BCDAA
char str1[] = "AABCD";
char str2[] = "aabcd";
char str3[] = "BCDAA";
int size = strlen(str1);
//字符串长度
int ret1 = Isreverse(str1, str2,size);
int ret2 = Isreverse(str1, str3, size);
printf("%d\n", ret1);
printf("%d\n", ret2);
system("pause");
return 0;
}
具体结果如下