用C ++编写程序,以检查是否可以通过将另一个字符串旋转两个位置来获得一个字符串

假设我们给了两个字符串“ a”和“ b”,任务是查找是否可以通过将字符串“ a”沿逆时针或顺时针方向精确旋转两个位置来获得字符串“ b”。例如,

输入1 -

a = google
b = legoog

输出-

True

说明-字符串“ google”可以沿逆时针方向旋转两个位置,这导致字符串“ legoog”。因此,我们返回True。

输入- 2 -

a = tuorialst
b = tutorials

输出-

False

说明-字符串'tuorialst'不能在任何方向上旋转两个位置以获得另一个字符串'tutorials'。因此,我们返回False。

解决这个问题的方法

对于给定的两个字符串,这种方法有两种情况-

  • 逆时针旋转

  • 顺时针旋转

首先,如果两个字符串的长度不同,则返回false。否则,如果两个字符串的长度都小于或等于“ 2”,则我们将返回True。

在其他情况下,我们将通过沿逆时针方向旋转两个位置来检查字符串'b'的子字符串是否等于字符串'a',然后返回True。否则为False。

同样,如果将字符串“ b”沿顺时针方向旋转两个位置,则它等于字符串“ a”,然后返回True,否则返回false。

  • 取两个输入字符串'a'和'b'

  • 布尔函数checkRotated( string a, string b)采用两个字符串“ a”和“ b”,并通过沿逆时针或顺时针方向旋转字符串“ b”来返回它们是否相等。

  • 检查字符串“ a”和字符串“ b”的长度。

  • 通过逆时针旋转两个位置,找到字符串“ b”的子字符串。

  • 现在检查结果子字符串是否等于字符串“ a”,如果相等则返回true。

  • 通过沿顺时针方向在两个位置旋转来查找字符串'b'的子字符串。

  • 现在检查结果子字符串是否等于字符串“ a”,如果相等则返回true。

  • 如果字符串不相等,则返回false。

示例

#include<bits/stdc++.h>
using namespace std;
bool checkRotated(string str1, string str2){
   if (str1.length() != str2.length())
      return false;
   if(str1.length() <= 2 || str2.length() <= 2)
      return (str1 == str2);
   string s1= str2.substr(str2.size()-2, str2.size());
   string s2= str2.substr(0,str2.size()-2);
   string s3= s1+s2;
   if(s3==str1)
      return true;
   string s4= str2.substr(2,str2.size());
   string s5= str2.substr(0,2);
   string s6= s4+s5;
   if(s6==str1)
      return true;
   return false;
}
int main(){
   string a= "google";
   string b="legoog";
   cout<<checkRotated(a,b)<<endl;
   return 0;
}
输出结果

如果我们运行上面的代码,它将输出为:

1

由于上述代码的输出为“ True”,因此将输出“ 1”。