从单词列表中找出最长的单词链

7 浏览
0 Comments

从单词列表中找出最长的单词链

这是我正在尝试创建的函数的一部分。

我不希望代码过于复杂。

我有一个单词列表,例如:

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列表,并且单词会重复出现。

非常感谢任何帮助。希望我没有让这变得太繁琐或令人困惑...谢谢!

0