字符串之(2)旋转词

题目:

  • 判断两个字符串是否互为旋转词

描述:
如果一个字符串str, 把字符串str前面任意一部分移到后面的而形成的新字符串叫做str的旋转字符串。比例str=“1234”, 那么他的旋转字符串有“2341”、“3412”、“4123”。现给定两个字符串str1和str2,判断这两个字符串是否互为旋转字符串。

要求:
如果这两个字符串长度互不相同,那么这两个字符串肯定不是旋转字符串;如果两个字符串长度相同,为n, 那么要求算法的时间复杂度为O(n)。

思路:

  • 如果两个字符串的长度不相同,直接返回false;
  • 如果长度相同,那么只需要将其中一个字符串进行拼接,然后判断这个新的大字符串中是否 包含另一个字符串,如果包含则两个互为旋转词;否则不是旋转词;
  • 例如str1=“123”, str2=“234”, 选择str1字符串进行拼接,生成新的字符串str_new=“123123”, 然后判断str_new中是否包含str2即可。

代码实现

函数实现使用了多个库函数,这个在面试过程中一般是不允许的。

  1. 字符串的拼接
  2. 在大字符串中寻找小字符串,这个可以是使用KMP算法实现。
int isRotation(const char *str1, const char *str2)
{
	
	char *str_new = NULL;
	int ret = 0, len = 0;
	if(!str1 || !str2 || strlen(str1)!=strlen(str2)){
		return FALSE;
	}
	len = strlen(str1)*2;

	str_new = (char *)malloc(len); /*无法确定字符串的长度*/
	if(!str_new){
		printf("malloc error\n");
		return FALSE;
	}
	memset(str_new, 0 ,len);
	sprintf(str_new, "%s%s", str1, str1);

	if(strstr(str_new, str2)){
		ret = TRUE;
	}else{
		ret =  FALSE;
	}
	free(str_new);
	return ret;
/* 使用KMP算法进行字符串的找到
	ret = kmpindex(str_new, str2, 0);
	if(ret>0){
		return TRUE;			
	}else{
		return FALSE;
	}
*/
} 	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叨陪鲤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值