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