用 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’。
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP