Giả sử chúng ta có hai chuỗi chữ thường s và t. Bây giờ hãy xem xét một phép toán trong đó chúng ta thay thế tất cả các lần xuất hiện của một ký tự trong s bằng một ký tự khác. Nếu chúng ta có thể thực hiện thao tác này bất kỳ số lần nào, chúng ta phải kiểm tra xem s có thể được chuyển đổi thành t hay không.
Vì vậy, nếu đầu vào là s ="eye" t ="pip", thì đầu ra sẽ là Đúng, vì chúng ta có thể thay "e" s bằng "p" s rồi "y" bằng "i".
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
Xác định một bản đồ m1 và một bản đồ m2
-
n:=kích thước của s
-
để khởi tạo i:=0, khi i
-
nếu s [i] ở m1, thì -
-
nếu m1 [s [i]] giống với t [i] thì -
-
chuyển sang lần lặp tiếp theo
-
-
trả về false
-
-
Nếu không
-
m1 [s [i]]:=t [i]
-
-
-
trả về true
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
#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); }
Đầu vào
"eye","pip"
Đầu ra
1