Giả sử chúng ta có hai chuỗi chữ thường s, và t chúng ta phải kiểm tra xem liệu chúng ta có thể tạo một ánh xạ 1-1 cho mỗi chữ cái trong s với một chữ cái khác (có thể là cùng một chữ cái) sao cho s có thể được ánh xạ thành t hay không. (Thứ tự các ký tự sẽ không được thay đổi).
Vì vậy, nếu đầu vào là s ="papa", t ="lili", thì đầu ra sẽ là True, vì chúng ta có thể tạo ánh xạ này:"p" thành "l", "a" -> "i"
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- s_dict:=một bản đồ mới
- t_dict:=một bản đồ mới
- đối với tôi trong phạm vi từ 0 đến tối thiểu kích thước s và kích thước t, hãy thực hiện
- nếu s [i] có trong s_dict thì
- nếu s_dict [s [i]] không giống với t [i], thì
- trả về Sai
- nếu s_dict [s [i]] không giống với t [i], thì
- ngược lại khi t [i] có trong t_dict thì
- nếu t_dict [t [i]] không giống với s [i], thì
- trả về Sai
- nếu t_dict [t [i]] không giống với s [i], thì
- nếu không,
- s_dict [s [i]]:=t [i]
- t_dict [t [i]]:=s [i]
- nếu s [i] có trong s_dict thì
- trả về True
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
class Solution:
def solve(self, s, t):
s_dict = {}
t_dict = {}
for i in range(min(len(s), len(t))):
if s[i] in s_dict:
if s_dict[s[i]] != t[i]:
return False
elif t[i] in t_dict:
if t_dict[t[i]] != s[i]:
return False
else:
s_dict[s[i]] = t[i]
t_dict[t[i]] = s[i]
return True
ob = Solution()
print(ob.solve("papa", "lili")) Đầu vào
"papa", "lili"
Đầu ra
True