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