สมมติว่าเรามีสตริงตัวพิมพ์เล็กสองตัว 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