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