AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
AABCD右旋一个字符得到DAABC
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
//左旋字符串
void Reverse(char*left, char*right){
while (left < right){
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
void Reverse_K(char*str, int k){
int len = strlen(str);
k %= len;//k有可能大于字符串的长度,但这也是合理的,相当于转了一圈,然后再移
Reverse(str, str + len - 1);//整体翻转
Reverse(str, str + len - 1 - k);//再翻转前半部分
Reverse(str + len - k, str + len - 1);//翻转后半部分
}
int IsLeftRotate(char*str1, char*str2)
{
int ret;
int len1 = strlen(str1);
int len2 = strlen(str2);
if (len1 != len2){
return 0;
}
while (len1){
Reverse_K(str1, 1);
if (strcmp(str1, str2) == 0){
return 1;
}
len1--;
}
return 0;
}
int main()
{
char str1[] = "AABCD";
char*str2 = "BCDAA";
Reverse_K(str1, 3);
int ret = IsLeftRotate(str1, str2);
if (ret == 1){
printf("str2是str1旋转过后的字符串\n");
}
else{
printf("str2不是str1旋转过后的字符串\n");
}
system("pause");
return 0;
}