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

โปรแกรมเพื่อตรวจสอบว่าสองสตริงปิดใน Python . หรือไม่


สมมติว่าเรามีสองสตริง s และ t เราต้องตรวจสอบว่า s และ t อยู่ใกล้หรือไม่ เราสามารถพูดได้ว่าสายอักขระสองเส้นอยู่ใกล้กันถ้าเราสามารถบรรลุหนึ่งจากอีกสายหนึ่งโดยใช้การดำเนินการต่อไปนี้ -

  • แลกเปลี่ยนอักขระสองตัวที่มีอยู่ (เหมือน abcde ถึง aecdb)

  • เปลี่ยนทุกการเกิดขึ้นของตัวละครที่มีอยู่เป็นตัวละครอื่นที่มีอยู่ และทำเช่นเดียวกันกับตัวละครอื่นๆ ด้วย (เช่น aacabb -> bbcbaa (ในที่นี้ a ทั้งหมดจะถูกแปลงเป็น b และในทางกลับกัน))

เราสามารถใช้การดำเนินการกับสตริงใดก็ได้กี่ครั้งก็ได้ตามต้องการ

ดังนั้น หากอินพุตเป็น s ="zxyyyx", t ="xyyzzz" ผลลัพธ์จะเป็นจริง เพราะเราสามารถรับ t จาก s ได้ใน 3 การดำเนินการ ("zxyyyx" -> "zxxyyy"), ("zxxyyy" -> "yxxzzz") และ ("yxxzzz" -> "xyyzzz")

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • ถ้า s และ t มีอักขระพิเศษใด ๆ แล้ว

    • คืนค่าเท็จ

  • a :=รายการค่าความถี่ทั้งหมดของอักขระใน s

  • b :=รายการค่าความถี่ทั้งหมดของอักขระใน t

  • เรียงลำดับรายการ

  • เรียงลำดับรายการ b

  • ถ้า a ไม่เหมือนกับ b แล้ว

    • คืนค่าเท็จ

  • คืนค่า True

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

from collections import Counter
def solve(s, t):
   if set(s) != set(t):
      return False
   a = list(Counter(s).values())
   b = list(Counter(t).values())
   a.sort()
   b.sort()
   if a != b:
      return False
   return True

s = "zxyyyx"
t = "xyyzzz"
print(solve(s, t))

อินพุต

"zxyyyx", "xyyzzz"

ผลลัพธ์

True