在Python中查找输入单词中是否存在短路的程序

在Python中查找输入单词中是否存在短路的程序

假设我们有一组单词。我们必须检查给定的单词是否可以链接为一个环。单词A只有当A的最后一个字符与B的第一个字符相同时,才可以放在链接圆环的另一个单词B的前面。每个单词必须被使用且仅能使用一次(第一个/最后一个单词不会被考虑)。

因此,如果输入为words = [“ant”, “dog”, “tamarind”, “nausea”, “gun”],则输出为True。

为此,我们将遵循以下步骤 –

  • 创建一个新的键 – 值对列表graph。

  • 创建一个新的集合seen。

  • 创建一个新的键 – 值对列表inDegree。

  • 创建一个新的键 – 值对列表outDegree。

  • 对于words中的每个单词,请执行以下操作

    • start:= word [0]

    • end:= word [-1]

    • 将end插入到graph [start]的末尾。

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

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

  • 对于outDegree中的每个节点,请执行以下操作 –

    • 如果outDegree [node]与inDegree [node]不同,则
      • 返回False
  • dfs(words [0,0])

  • 如果已使用的大小与graph的大小相同,则返回。

  • 定义函数dfs(),这将带有节点。

    • 添加(node)中的seen

    • 对于graph [node]中的每个子项,请执行以下操作 –

      • 如果不存在,则为child not in seen,则

      • dfs(child)

示例

让我们看一下以下实现,以更好地理解 –

import collection
class Solution:
   def solve(self, words):
      self.graph = collection.defaultdict(list)
      self.seen = set()
      inDegree = collection.Counter()
      outDegree = collection.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:
         如果outDegree [node]!= inDegree [node]:
            返回False
      dfs(words [0] [0])
      如果已使用的大小与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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程