Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

เขียนโปรแกรมในภาษา C ++ เพื่อตรวจสอบว่าสามารถรับสตริงได้หรือไม่โดยการหมุนสตริงอื่นสองตำแหน่ง


สมมติว่าเราได้สตริง '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"