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

โปรแกรมค้นหาแยกสตริงเป็นจำนวนสูงสุดของสตริงย่อยที่ไม่ซ้ำกันในPython


สมมติว่าเรามีสตริง เราต้องหาจำนวนสูงสุดของสตริงย่อยเฉพาะที่สามารถแยกสตริงที่กำหนดได้ เราสามารถแยกสตริงออกเป็นรายการของสตริงย่อยที่ไม่ว่างเปล่า เพื่อให้การต่อกันของสตริงย่อยเป็นสตริงดั้งเดิม แต่เราต้องแยกสตริงย่อยออกเพื่อให้ทั้งหมดเหมือนกัน

ดังนั้น หากอินพุตเป็น s ="pqpqrrr" ผลลัพธ์จะเป็น 5 เพราะเราสามารถแยกออกเป็น ['p', 'q', 'pq', 'r', 'rr'] ถ้าเราแยกเช่น ['p', 'q', 'p', 'q', 'r', 'rr'] ไม่ถูกต้องเพราะที่นี่ 'p' และ 'q' ปรากฏหลายครั้ง

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

  • res :=รายการที่มีองค์ประกอบเดียว 0
  • กำหนดฟังก์ชัน dfs() นี่จะใช้เวลา s, เส้นทางซึ่งเป็นชุดว่างใหม่
  • ถ้า s ว่าง ก็
    • res[0] :=สูงสุดของ res[0] และขนาดของเส้นทาง
    • คืนสินค้า
  • สำหรับฉันในช่วง 1 ถึงขนาด s ทำ
    • x :=subarray ของ s[จากดัชนี 0 ถึง i-1]
    • ถ้า x ไม่อยู่ในเส้นทางแล้ว
      • dfs(สตริงย่อยของ s[จากดัชนี i ถึง end], เส้นทาง U {x})
  • จากวิธีหลัก ให้ทำดังนี้ -
  • dfs
  • ผลตอบแทน[0]

ตัวอย่าง

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

def solve(s):
   res = [0]
   def dfs(s, path=set()):
      if not s:
         res[0] = max(res[0], len(path))
         return
      for i in range(1, len(s)+1):
         x = s[:i]
         if x not in path:
            dfs(s[i:], path|{x})
   dfs(s)
   return res[0]
s = "pqpqrrr"
print(solve(s))

อินพุต

"pqpqrrr"

ผลลัพธ์

5