Итак, это часть функции, которую я пытаюсь сделать.
Я не хочу, чтобы код был слишком сложным.
У меня есть список слов, например
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], слова [1], слова [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 и снова повторили слова.
Любая помощь очень ценится. Надеюсь, я не сделал это слишком сложным или запутанным... Спасибо!