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

โปรแกรมค้นหาว่ามีการป้อนคำใน Python หรือไม่


สมมติว่าเรามีรายการคำ เราต้องตรวจสอบคำที่ให้มาว่าสามารถโยงเป็นวงกลมได้ คำ A สามารถวางหน้าคำอื่น B ​​ในวงกลมที่มีลูกโซ่ได้ ถ้าเฉพาะอักขระตัวสุดท้ายของ A เท่านั้นที่เหมือนกันกับอักขระตัวแรกของ B ทุกคำต้องใช้และใช้ได้เพียงครั้งเดียว (คำแรก/คำสุดท้าย จะไม่รับพิจารณา)

ดังนั้น หากอินพุตเป็นเหมือนคำ =["ant","dog","tamarind","nausea","gun"] ผลลัพธ์จะเป็น True

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

  • กราฟ :=รายการคู่คีย์-ค่าใหม่

  • เห็นแล้ว :=ชุดใหม่

  • inDegree :=รายการคู่คีย์-ค่าใหม่

  • outDegree :=รายการคู่คีย์-ค่าใหม่

  • สำหรับแต่ละคำในคำ ทำ

    • start :=word[0]

    • จบ :=word[-1]

    • แทรกจุดสิ้นสุดที่จุดสิ้นสุดของกราฟ[เริ่มต้น]

    • outDegree[start] :=outDegree[start] + 1

    • inDegree[end] :=inDegree[end] + 1

  • สำหรับแต่ละโหนดใน outDegree ให้ทำ

    • ถ้า outDegree[node] ไม่เหมือนกับ inDegree[node] แล้ว

      • คืนค่าเท็จ

  • dfs(words[0,0])

  • ขนาดผลตอบแทนที่เห็นถ้าเท่ากับขนาดของกราฟ

  • กำหนดฟังก์ชัน dfs() นี่จะใช้โหนด

    • เพิ่ม (โหนด) ที่เห็น

    • สำหรับเด็กแต่ละคนในกราฟ[โหนด] ทำ

      • ถ้าเด็กไม่อยู่ในที่เห็นแล้ว

      • dfs(ลูก)

ตัวอย่าง

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

import collections
class Solution:
   def solve(self, words):
      self.graph = collections.defaultdict(list)
      self.seen = set()
      inDegree = collections.Counter()
      outDegree = collections.Counter()
      for word in words:
         start = word[0]
         end = word[-1]
         self.graph[start].append(end)
         outDegree[start] += 1
         inDegree[end] += 1
      for node in outDegree:
         if outDegree[node] != inDegree[node]:
            return False
      self.dfs(words[0][0])
      return len(self.seen) == len(self.graph)
   def dfs(self, node):
      self.seen.add(node)
      for child in self.graph[node]:
         if child not in self.seen:
            self.dfs(child)
ob = Solution()
print(ob.solve(["ant","dog","tamarind","nausea","gun"]))

อินพุต

["ant","dog","tamarind","nausea","gun"]

ผลลัพธ์

True