题目详细
给定s1 =AABCD和s2 = BCDAA,返回1
给定s1=abcd和s2=ACBD,返回0.
只介绍一种实现起来更精简的方法。
思路:将其中一个字符串重复一次,然后检查另一个字符串是否为这个重复字符串的子串。
如果是,那么这个字符串肯定是由另一个字符串通过旋转得到。
int Determining_Rotation(char* s1, char* s2)
{//判断s2是否为s1旋转之后得到的字符串
int len1 = strlen(s1);
int len2 = strlen(s2);
//如果两个字符串长度不相等,则s2不可能是s1的旋转
if (len1 != len2)
return 0;
//定义一个足够大的临时数组
char temp[1999];
//将s1复制到temp中,并再次附加到temp末尾
strcpy(temp, s1);
strcat(temp, s1);
//检查s2是否为s1的子字符串
return strstr(temp, s2) != NULL;
}
int main()
{
char* s1 = "AABCD";
char* s2 = "BCDAA";
char* s3 = "abcd";
char* s4 = "ACBD";
printf("%s是否由%s旋转得来?%d\n", s2, s1, Determining_Rotation(s1, s2));
printf("%s是否由%s旋转得来?%d\n",s4,s3,Determining_Rotation(s3,s4));
return 0;
}