Circle of Chained Words
环形单词链
问题描述
如果一个单词的最后一个字母与另一个单词的第一个字母相同,那么这两个单词可以组成一个单词链。给定一个列表,列表中有多个单词,判断列表中的单词是否能组成一个单词链,并且单词链会能够形成一个环。
测试样例
# Input:
['eggs', 'karat', 'apple', 'snack', 'tuna']
# Output:
True
# apple - eggs - snack - karat - tuna - apple(环)
内容首发于微信公众号IT信息教室,如果您想学习更多AI相关的技能,欢迎搜索关注或微信扫描下方二维码关注~~
参考代码
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# O(n) time, O(n) space.
from collections import defaultdict
def dfs(graph, visited, curr, start_word, length):
if length == 1:
if start_word[0] == curr[-1]:
return True
else:
return False
visited.add(curr)
for neighbor in graph[curr[-1]]:
if neighbor not in visited:
return dfs(graph, visited, neighbor, start_word, length - 1)
visited.remove(curr)
return False
def chainedWords(words):
graph = defaultdict(list)
for word in words:
graph[word[0]].append(word)
return dfs(graph, set(), words[0], words[0], len(words))
# Test Program
words = ['apple', 'eggs', 'snack', 'karat', 'tuna']
result = chainedWords(words)
print(result)
# True
# ['apple', 'eggs', 'snack', 'karat', 'tuna'] 形成一个首尾相接的环。