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

本文介绍如何通过将字符串拼接自身并搜索目标字符串来判断两个字符串是否互为旋转词,提供了一个O(N)时间复杂度的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

如果一个字符串str,把字符串str前面任意的部分挪到后面形成的字符串叫做str的旋转词。比如str="12345",str的旋转词有"12345"、"23451"、"34512"、"45123"、和"51234"。给定两个字符串a和b,请判断a和b是否互为旋转词。

举例:

a = "cdab", b = "abcd", 返回true

a = "1ab2", b = "ab12", 返回false

a = "2ab1", b = "ab12", 返回true

要求:

如果a和b长度不一样,那么a和b必然不互为旋转词,可以直接返回false。当a和b长度一样,都为N时,要求解法的时间复杂度为O(N)。


分析:

这道题考察的是一个字符串的查找的小技巧,我们就举a = "cdab", b = "abcd",这个例子。首先stringb2 = b + b,那么b2中所存储的字符串内容就是abcdabcd,接着我们需要在b2这个字符查找,a是不是b2的子串就可以了,如果是,则返回true,否则返回false。编程风格采选STL

//判断两个字符串是否互为旋转词 
#include<iostream>
#include<string>
using namespace std;

bool isRotation(string a, string b);

int main()
{
	string a, b;
	while(cin>>a>>b)
	{
		if(isRotation(a, b))
			cout<<a<<"和"<<b<<"互为旋转词"<<endl;
		else
			cout<<a<<"和"<<b<<"不互为旋转词"<<endl;
		}
		
	return 0;
}

bool isRotation(string a, string b) 
{
	if(a.length() == 0 || b.length() == 0 || a.length() != b.length())
		return false;
	string b2 = b + b;

	 
	if(b2.find(a) < b.length())
		return true;
	return false;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值