在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
- start:= word [0]
-
对于outDegree中的每个节点,请执行以下操作 –
- 如果outDegree [node]与inDegree [node]不同,则
- 返回False
- 如果outDegree [node]与inDegree [node]不同,则
- 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