C++程序 检查两个字符串是否是彼此的旋转体
在我们的日常生活中,经常会遇到检查两个字符串是否彼此是旋转体的需求。例如,把字符串”abcdef”旋转一下,得到字符串”defabc”,他们就是彼此的旋转体。那么,在本文中,我们将会教大家如何使用C++编程实现该功能。
问题描述
给定两个字符串str1和str2,我们需要检查两个字符串是否是彼此的旋转体。如果是,返回true,否则,返回false。
解决方案
解题思路:
- 首先检查两个字符串的长度是否相同,如果不同,那么它们一定不是彼此的旋转体。
- 我们可以通过循环遍历的方式,即逐个旋转str1,然后和str2比较,看是否相同。如果旋转完全了一圈,还没有找到相同的,则它们不是彼此的旋转体。
下面是C++的代码实现:
#include<bits/stdc++.h>
using namespace std;
bool areRotations(string str1, string str2)
{
if (str1.length() != str2.length())
return false;
string temp = str1 + str1;
//如果是旋转的话,旋转后的两个字符串会组成一个新的字符串,而长度就是原来字符串长度的两倍。因此,我们可以将其中一个字符串复制一遍,拼接起来,然后判断另一个字符串是否是新字符串的子串即可。
return (temp.find(str2) != string::npos);
}
int main()
{
string str1 = "ABCDE";
string str2 = "CDEAB";
if (areRotations(str1, str2))
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
string str3 = "AAAB";
string str4 = "ABAA";
if (areRotations(str3, str4))
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
return 0;
}
结论
最后,我们可以得到结论:对于给定的两个字符串str1、str2,如果它们的长度相同,且str2是str1旋转后得到的字符串的子串,则认为它们是彼此的旋转体。以上为C++代码实现。