用 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’。

更新于: 2021年2月5日

430 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.