从单词列表中找出最长的单词链
从单词列表中找出最长的单词链
这是我正在尝试创建的函数的一部分。
我不希望代码过于复杂。
我有一个单词列表,例如:
words = ['giraffe', 'elephant', 'ant', 'tiger', 'racoon', 'cat', 'hedgehog', 'mouse']
单词链序列的想法是下一个单词以上一个单词结尾的字母开始。
(编辑:每个单词都不能重复使用。除此之外没有其他限制。)
我希望输出是最长的单词链序列,本例中为:
['hedgehog', 'giraffe', 'elephant', 'tiger', 'racoon']
我不太确定如何做到这一点,我尝试了不同的方法。其中之一是...
如果我们从列表中的特定单词开始,例如words[0](即'giraffe'),则此代码可以正确找到单词链:
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']
但是,我想找到最长的可能单词链(如上所述)。
我的方法:因此,我尝试使用我写的上述可行代码,并循环遍历,使用列表中的每个单词作为起点,并为每个word[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) # 不确定 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列表,并且单词会重复出现。
非常感谢任何帮助。希望我没有让这变得太繁琐或令人困惑...谢谢!