สมมติว่าเรามีสตริงตัวพิมพ์เล็กสองตัว s และ t เราต้องตรวจสอบว่าเราสามารถสร้างการจับคู่ 1 ต่อ 1 สำหรับแต่ละตัวอักษรใน s ไปยังตัวอักษรอื่นได้หรือไม่ (อาจเป็นตัวอักษรเดียวกัน) เพื่อให้สามารถจับคู่ s กับ t ได้ (ลำดับของตัวละครจะไม่มีการเปลี่ยนแปลง)
ดังนั้น หากอินพุตเป็นเหมือน s ="papa", t ="lili" ผลลัพธ์จะเป็น True เนื่องจากเราสามารถสร้างการแมปนี้:"p" ถึง "l", "a" -> "i"
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- s_dict :=แผนที่ใหม่
- t_dict :=แผนที่ใหม่
- สำหรับ i ในช่วง 0 ถึงต่ำสุดของขนาด s และ t ให้ทำ
- ถ้า s[i] มีอยู่ใน s_dict แล้ว
- ถ้า s_dict[s[i]] ไม่เหมือนกับ t[i] แล้ว
- คืนค่าเท็จ
- ถ้า s_dict[s[i]] ไม่เหมือนกับ t[i] แล้ว
- มิฉะนั้น เมื่อ t[i] มีอยู่ใน t_dict แล้ว
- ถ้า t_dict[t[i]] ไม่เหมือนกับ s[i] แล้ว
- คืนค่าเท็จ
- ถ้า t_dict[t[i]] ไม่เหมือนกับ s[i] แล้ว
- มิฉะนั้น
- s_dict[s[i]] :=t[i]
- t_dict[t[i]] :=s[i]
- ถ้า s[i] มีอยู่ใน s_dict แล้ว
- คืนค่า True
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
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")) อินพุต
"papa", "lili"
ผลลัพธ์
True