📅  最后修改于: 2023-12-03 15:14:26.461000             🧑  作者: Mango
在本文中,我们将介绍如何编写一个C程序来检查两个字符串是否彼此旋转。例如,"abcd" 和 "cdab" 是相互旋转的字符串。
一个字符串s是另一个字符串t的旋转(或环移),当且仅当s可以通过将t分成两部分x和y(即t = xy)并将它们重新排列形成的字符串得到。具体来说,字符串s=xy,t=yx。例如,t=waterbottle,s=erbottlewat 是旋转关系。
我们可以使用以下算法来检查字符串是否相互旋转:
这个算法的时间复杂度是O(n),其中n是字符串的长度。
下面是用C语言实现上述算法的代码:
#include <stdio.h>
#include <string.h>
// 检查字符串是否相互旋转
int is_rotation(char s[], char t[]) {
int len_s = strlen(s);
int len_t = strlen(t);
// 如果长度不同,肯定不是旋转字符串
if (len_s != len_t) {
return 0;
}
// 构造新字符串
char str[len_s*2 + 1];
strcpy(str, s);
strcat(str, s);
// 检查 t 是否是新字符串的子串
if (strstr(str, t) != NULL) {
return 1;
} else {
return 0;
}
}
int main() {
char s[] = "abcd";
char t[] = "cdab";
if (is_rotation(s, t)) {
printf("%s and %s are rotation of each other.\n", s, t);
} else {
printf("%s and %s are not rotation of each other.\n", s, t);
}
return 0;
}
我们首先定义了一个 is_rotation
函数,用于检查两个字符串是否相互旋转。接下来,在主函数中,我们定义了两个字符串并将它们传递给 is_rotation
函数进行检查。如果它们是相互旋转的字符串,则输出相应的消息。
在本文中,我们介绍了如何编写一个C程序来检查两个字符串是否相互旋转。我们展示了一个简单但有效的算法,并提供了具体的代码实现。如果你想进一步了解字符串操作,可以查看标准库中的字符串函数,例如 strlen
、strcpy
、strcat
和 strstr
。