สมมติว่าเรามีสตริงตัวพิมพ์เล็กสองตัว s และ t ตอนนี้ให้พิจารณาการดำเนินการที่เราแทนที่การเกิดขึ้นทั้งหมดของอักขระใน s ด้วยอักขระอื่น หากเราสามารถดำเนินการนี้ได้หลายครั้ง เราต้องตรวจสอบว่า s สามารถแปลงเป็น t ได้หรือไม่
ดังนั้น หากอินพุตเป็น s ="eye" t ="pip" ผลลัพธ์จะเป็น True เนื่องจากเราสามารถแทนที่ "e" ด้วย "p" ตามด้วย "y" ด้วย "i"
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
กำหนดหนึ่งแผนที่ m1 และอีกแผนที่ m2
-
n :=ขนาดของ s
-
สำหรับการเริ่มต้น i :=0 เมื่อ i
-
ถ้า s[i] อยู่ใน m1 แล้ว −
-
ถ้า m1[s[i]] เหมือนกับ t[i] แล้ว −
-
ไปอ่านตอนต่อไป
-
-
คืนค่าเท็จ
-
-
มิฉะนั้น
-
m1[s[i]] :=t[i]
-
-
-
คืนความจริง
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <bits/stdc++.h> using namespace std; bool solve(string s, string t) { map m1, m2; int n = s.size(); for(int i = 0; i <n; i++){ if(m1.count(s[i])){ if(m1[s[i]] == t[i]) continue; return false; } else{ m1[s[i]] = t[i]; } } return true; } int main(){ string s = "eye", t = "pip"; cout << solve(s, t); }
อินพุต
"eye","pip"
ผลลัพธ์
1