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