สมมติว่าเรามีสตริงสองสตริง 'a' และ 'b' งานคือหาว่าเราสามารถได้สตริง 'b' โดยการหมุนสตริง 'a' ทั้งหมดสองตำแหน่งในทิศทางตรงข้ามกับเข็มนาฬิกาหรือตามเข็มนาฬิกา ตัวอย่างเช่น
ตัวอย่างอินพุต 1
a = "google", b = "legoog"
เอาต์พุต
True
คำอธิบาย
สตริง 'google' สามารถหมุนในทิศทางตรงข้ามกับเข็มนาฬิกาสองตำแหน่ง ซึ่งทำให้ได้สตริง 'legoog' ดังนั้นเราคืนค่า True
ตัวอย่างอินพุต 2
a = "tuorialst", b = "tutorials"
เอาต์พุต
False
คำอธิบาย
สตริง 'tuorialst' ไม่สามารถหมุนสองตำแหน่งในทิศทางใดทิศทางหนึ่งเพื่อได้อีกสตริง 'tutorials' ดังนั้นเราคืนค่า False
วิธีการแก้ปัญหา
สำหรับสตริงสองสตริงที่กำหนด เรามีสองกรณีในวิธีนี้
- สำหรับการหมุนทวนเข็มนาฬิกา (Anticlockwise)
- สำหรับการหมุนตามเข็มนาฬิกา (Clockwise)
ก่อนอื่น ถ้าความยาวของทั้งสองสตริงต่างกัน ให้คืนค่า false มิฉะนั้นถ้าความยาวของทั้งสองสตริงน้อยกว่าหรือเท่ากับ '2' เราจะคืนค่า True
ในกรณีอื่น เราจะตรวจสอบว่าถ้า substring ของสตริง 'b' โดยการหมุนสองตำแหน่งในทิศทางตรงข้ามกับเข็มนาฬิกาเท่ากับสตริง 'a' เราจะคืนค่า True มิฉะนั้น False
เช่นเดียวกัน ถ้าด้วยการหมุนสตริง 'b' ในทิศทางตามเข็มนาฬิกาสองตำแหน่ง มันกลายเป็นเท่ากับสตริง 'a' ให้คืนค่า True มิฉะนั้น เราจะคืนค่า false
- รับอินพุตสตริงสองสตริง 'a' และ 'b'
- ฟังก์ชัน Boolean checkRotated(string a, string b) รับสตริงสองสตริง 'a' และ 'b' และคืนค่าว่าพวกเขาเท่ากันโดยการหมุนสตริง 'b' ในทิศทางตรงข้ามกับเข็มนาฬิกาหรือตามเข็มนาฬิกา
- ตรวจสอบความยาวของสตริง 'a' และสตริง 'b'
- หา substring ของสตริง 'b' โดยการหมุนสองตำแหน่งทวนเข็มนาฬิกา
- ตรวจสอบว่าผลลัพธ์ substring เท่ากับสตริง 'a' หรือไม่และคืนค่า true ถ้าเท่ากัน
- หา substring ของสตริง 'b' โดยการหมุนสองตำแหน่งตามเข็มนาฬิกา
- ตรวจสอบว่าผลลัพธ์ substring เท่ากับสตริง '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'