Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมตรวจสอบว่าสตริงหนึ่งสามารถแมปแบบ 1 ต่อ 1 กับสตริงอื่นใน Python . ได้หรือไม่


สมมติว่าเรามีสตริงตัวพิมพ์เล็กสองตัว 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] แล้ว
        • คืนค่าเท็จ
    • มิฉะนั้น เมื่อ t[i] มีอยู่ใน t_dict แล้ว
      • ถ้า t_dict[t[i]] ไม่เหมือนกับ s[i] แล้ว
        • คืนค่าเท็จ
    • มิฉะนั้น
      • s_dict[s[i]] :=t[i]
      • t_dict[t[i]] :=s[i]
  • คืนค่า 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