0
点赞
收藏
分享

微信扫一扫

【字符串旋转结果】

罗蓁蓁 2022-03-11 阅读 139

【题目】

写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。

例如:给定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;
}

举报

相关推荐

0 条评论