用 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 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告