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

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

สมมติว่าเรามีสตริงสองสตริง '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'