ในส่วนนี้ เราจะมาดูวิธีการตรวจสอบว่าสองสตริงเป็นสตริงเมตาหรือไม่ สตริงเมตาเป็นสตริงที่มีความคล้ายคลึงกันมาก หากเราสลับสององค์ประกอบในสตริงเดียว องค์ประกอบนั้นจะถูกจับคู่กับสตริงอื่น สมมติว่า 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