Как искать слово в дереве, представленное в виде словаря словарей в python?

У меня есть словарь слов, как это -

{"a": {"b": {"e": {},
             "f": {},
             "g": {"l": {},
                   "m": {},
                   "n": {}}},
       "c": {"h": {},
             "i": {}},
       "d": {"j": {},
             "k": {}}}}

Это древовидная структура, которая переводится так

            a   
          /  |\
         /   | \
        /    |  \
       /     |   \
      /      |    \
     /       |     \
    b        c      d
  / | \      | \    |\
e   f  g     h  i   j k
      / |\  
     l  m n

И у меня есть список персонажей - [a, c, h, q, r]Я хочу выяснить, существует ли данное слово (список символов) в словаре, и если его нет, вернуть самую длинную подпоследовательность из существующего начала. Если это так, верните тот же список.

В приведенном выше примере возвращение должно быть - [a, c, h]

1 ответ

Решение

редактировать - спасибо за обновление данных до чего-то, что имеет смысл.


Пройдя через три, это довольно интересно. Вот быстрая демонстрация.

trie = {"a": {"b": {"e": {},
                    "f": {},
                    "g": {"l": {},
                          "m": {},
                          "n": {}}},
              "c": {"h": {},
                    "i": {}},
              "d": {"j": {},
                    "k": {}}}}

target = 'achqr'
sub_trie = trie
longest_sequence = []
for c in target:
    sub_trie = sub_trie.get(c)
    if sub_trie is None:  # the letter being looked for doesn't exist after this sequence
        break
    longest_sequence.append(c)  # track the sequence since the trie is not reverse linked
print(longest_sequence)
Другие вопросы по тегам