Problem #11 [Medium]

This problem was asked by Twitter.

Implement an autocomplete system. That is, given a query string s and a set of all possible query strings, return all strings in the set that have s as a prefix.

For example, given the query string de and the set of strings [dog, deer, deal], return [deer, deal].

Hint: Try preprocessing the dictionary into a more efficient data structure to speed up queries.
经典用Trie树。

class TrieNode:
    def __init__(self) -> None:
        self.children ={}
        self.is_end_of_word =False

class AutocompleteSystem:
    def __init__(self, words) -> None:
        self.root = TrieNode()
        self.build_trie(words)
    
    def build_trie(self, words):
        for word in words:
            node = self.root
            for char in word:
                if char not in node.children:
                    node.children[char] = TrieNode()
                node = node.children[char]
            node.is_end_of_word = True

    def autocomplete(self, prefix):
        node = self.root
        result = []
        for char in prefix:
            if char not in node.children:
                return result
            node = node.children[char]

        self.find_words_with_prefix(node, prefix, result)
        return result

    def find_words_with_prefix(self, node, current_word, result):
        if node.is_end_of_word:
            result.append(current_word)

        for char, child_node in node.children.items():
            self.find_words_with_prefix(child_node, current_word + char, result)


# Create an AutocompleteSystem with a set of words
autocomplete_system = AutocompleteSystem(["dog", "deer", "deal"])

# Query for autocomplete suggestions
result = autocomplete_system.autocomplete("de")
print(result)  # Output: ['deer', 'deal']
	
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值