1️⃣ 前缀树的概念
前缀树,又叫 字典树(Trie),是一种树形数据结构,用于 高效存储和查找字符串集合,尤其擅长处理 前缀匹配问题。
特点:
-
每个节点表示一个字符串的 前缀,根节点表示空字符串。
-
从根节点到某个节点的路径,形成了该节点所代表的字符串前缀。
-
节点通常包含:
- 子节点指针(可以是数组、哈希表等)
- 是否为完整字符串的标记(例如
isEnd
)
前缀树,又叫 字典树(Trie),是一种树形数据结构,用于 高效存储和查找字符串集合,尤其擅长处理 前缀匹配问题。
特点:
每个节点表示一个字符串的 前缀,根节点表示空字符串。
从根节点到某个节点的路径,形成了该节点所代表的字符串前缀。
节点通常包含:
isEnd
)Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。
这一数据结构有相当多的应用情景,例如自动补全和拼写检查。
请你实现 Trie 类:
Trie() 初始化前缀树对象。
void insert(String word) 向前缀树中插入字符串 word 。
boolean search(String word) 如果字符串 word 在前缀树中,返回 true(即,在检索之前已经插入);否则,返回 false 。
boolean startsWith(String prefix) 如果之前已经插入的字符串 word 的前缀之一为 prefix ,返回 true ;否则,返回 false 。
给你一个产品数组 products 和一个字符串 searchWord ,products 数组中每个产品都是一个字符串。
请你设计一个推荐系统,在依次输入单词 searchWord 的每一个字母后,推荐 products 数组中前缀与 searchWord 相同的最多三个产品。如果前缀相同的可推荐产品超过三个,请按字典序返回最小的三个。
请你以二维列表的形式,返回在输入 searchWord 每个字母后相应的推荐产品的列表。
示例 1:
输入:products = ["mobile","mouse","moneypot","monitor","mousepad"], searchWord = "mouse"
输出:[
["mobile","moneypot","monitor"],
["mobile","moneypot","monitor"],
["mouse","mousepad"],
["mouse","mousepad"],
["mouse","mousepad"]
]
解释:按字典序排序后的产品列表是 ["mobile","moneypot","monitor","mouse","mousepad"]
输入 m 和 mo,由于所有产品的前缀都相同,所以系统返回字典序最小的三个产品 ["mobile","moneypot","monitor"]
输入 mou, mous 和 mouse 后系统都返回 ["mouse","mousepad"]
示例 2: