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

Meta Strings (ตรวจสอบว่าสองสตริงสามารถเป็นสตริงเดียวกันได้หรือไม่หลังจากสลับเป็นสตริงเดียว) ใน C++


ในส่วนนี้ เราจะมาดูวิธีการตรวจสอบว่าสองสตริงเป็นสตริงเมตาหรือไม่ สตริงเมตาเป็นสตริงที่มีความคล้ายคลึงกันมาก หากเราสลับสององค์ประกอบในสตริงเดียว องค์ประกอบนั้นจะถูกจับคู่กับสตริงอื่น สมมติว่า 2 สตริงคือ "HELLO" และ "OELLH" จากนั้นเป็นสตริงเมตา

หากต้องการตรวจสอบว่าสตริงสองสตริงเป็นสตริงเมตาหรือไม่ เราต้องทำตามขั้นตอนเหล่านี้

ขั้นตอน

  • หากสตริงทั้งสองมีความยาวต่างกัน ให้คืนค่าเท็จ

  • มิฉะนั้น ให้หาจำนวนอักขระที่ไม่ตรงกัน เก็บดัชนีของอักขระที่ไม่ตรงกันด้วย

  • หากจำนวนมากกว่า 2 ให้คืนค่าเท็จ

  • มิฉะนั้น ให้สลับอักขระเหล่านี้ หากสองสตริงเหมือนกัน ให้คืนค่าจริง ไม่เช่นนั้นเป็นเท็จ

ตัวอย่าง

#include <iostream>
using namespace std;
bool areTheyMetaString(string s1, string s2) {
   int s1_len = s1.length();
   int s2_len = s2.length();
   if (s1_len != s2_len)
   return false;
   int prev = -1, curr = -1;
   int count = 0;
   for (int i=0; i<s1_len; i++) {
      if (s1[i] != s2[i]) {
         count++; // number of unmatched characters
         if (count > 2)
         return false;
         prev = curr;
         curr = i;
      }
   }
   return (count == 2 && s1[prev] == s2[curr] && s1[curr] == s2[prev]);
}
int main() {
   string s1 = "HELLO", s2 = "OELLH";
   if(areTheyMetaString(s1, s2)){
      cout << "Meta Strings";
   } else {
      cout << "Not Meta Strings";
   }
}

ผลลัพธ์

Meta Strings