【题目】
写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 =AABCD和s2 = BCDAA,返回1
给定s1=abcd和s2=ACBD,返回0.
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
AABCD右旋一个字符得到DAABC
代码实现:
void reverse(char*l, char *r)
{
assert(l&&r);//我们对l和r进行了解引用操作,不能为空指针
while (l < r)//说明中间有字符需要逆序
{
char tmp = *l;//tmp里面放的是*l
*l = *r;
*r = tmp;
l++;
r--;
}
}
void left_move(char*arr, int k)
{
int len = strlen(arr);
k %= len;
int i = 0;
assert(arr);//不能是空指针
reverse(arr,arr+k-1);//逆序左边
reverse(arr+k,arr+len-1);//逆序右边
reverse(arr,arr+len-1);//逆序整体
}
//判断arr2是否是arr1旋转得到的?
int is_left_move(char arr1[], char arr2[])
{
int len = strlen(arr1);
int i = 0;
for (i = 0; i < len; i++)
{
left_move(arr1, 1);//旋转一次,下次拿旋转好的再旋转一次
if (strcmp(arr1, arr2) == 0)
return 1;//是
}
return 0; //不是
}
int main()
{
char arr1[] = "AABCD";
char arr2[] = "BCDAA";
int ret = is_left_move(arr1,arr2);
if (ret == 1)
printf("YES\n");
else
printf("NO\n");
return 0;
}