【发布时间】:2019-04-28 07:56:13
【问题描述】:
所以,这是我正在尝试制作的功能的一部分。
我不希望代码太复杂。
我有一个单词列表,例如
words = ['giraffe', 'elephant', 'ant', 'tiger', 'racoon', 'cat', 'hedgehog', 'mouse']
单词链序列的思想是下一个单词以最后一个单词结尾的字母开头。
(编辑:每个单词不能多次使用。除此之外没有其他限制。)
我希望输出给出最长的词链序列,在这种情况下是:
['hedgehog', 'giraffe', 'elephant', 'tiger', 'racoon']
我不太确定该怎么做,我尝试过不同的尝试。其中之一……
如果我们从列表中的特定单词开始,此代码会正确找到单词链,例如词[0](所以“长颈鹿”):
words = ['giraffe', 'elephant', 'ant', 'tiger', 'racoon', 'cat', 'hedgehog', 'mouse']
word_chain = []
word_chain.append(words[0])
for word in words:
for char in word[0]:
if char == word_chain[-1][-1]:
word_chain.append(word)
print(word_chain)
输出:
['giraffe', 'elephant', 'tiger', 'racoon']
但是,我想找到可能最长的单词链(如上所述)。
我的方法:所以,我尝试使用我编写并循环的上述工作代码,使用列表中的每个单词作为起点并找到每个单词的单词链[0 ]、word[1]、word[2] 等。然后我尝试使用 if 语句找到最长的词链,并将长度与之前最长的链进行比较,但我无法正确完成,我没有真的不知道这是怎么回事。
words = ['giraffe', 'elephant', 'ant', 'tiger', 'racoon', 'cat', 'hedgehog', 'mouse']
word_chain = []
max_length = 0
for starting_word_index in range(len(words) - 1):
word_chain.append(words[starting_word_index])
for word in words:
for char in word[0]:
if char == word_chain[-1][-1]:
word_chain.append(word)
# Not sure
if len(word_chain) > max_length:
final_word_chain = word_chain
longest = len(word_chain)
word_chain.clear()
print(final_word_chain)
这是我的第 n 次尝试,我认为这会打印一个空列表,在此之前我进行了不同的尝试,但未能正确清除 word_chain 列表并最终再次重复单词。
非常感谢任何帮助。希望我没有让这变得太乏味或令人困惑......谢谢!
【问题讨论】:
-
@dataLeo 嗨,每个单词不能多次使用(所以大象只能使用一次),除此之外没有其他限制。目的是找到最长的词链序列。
-
您是否需要额外的预防措施,以防有人输入以相同字母开头和结尾的名称? (……好像我不能想出一个……)
-
这将是对codegolf.stackexchange.com的巨大贡献
-
这个问题等价于在有向循环图中找到最长的路径,其中边最多遍历一次。
-
这个问题的通用名称:stackoverflow.com/questions/29522351/…
标签: python recursion graph path-finding