0745:前缀和后缀搜索(★★)
目录
题目
设计一个包含一些单词的特殊词典,并能够通过前缀和后缀来检索单词。
实现 WordFilter
类:
WordFilter(string[] words)
使用词典中的单词words
初始化对象。f(string pref, string suff)
返回词典中具有前缀pref
和后缀suff
的单词的下标。如果存在不止一个满足要求的下标,返回其中 最大的下标 。如果不存在这样的单词,返回-1
。
示例:
输入 ["WordFilter", "f"] [[["apple"]], ["a", "e"]] 输出 [null, 0] 解释 WordFilter wordFilter = new WordFilter(["apple"]); wordFilter.f("a", "e"); // 返回 0 ,因为下标为 0 的单词:前缀 prefix = "a" 且 后缀 suffix = "e" 。
提示:
1 <= words.length <= 104
1 <= words[i].length <= 7
1 <= pref.length, suff.length <= 7
words[i]
、pref
和suff
仅由小写英文字母组成- 最多对函数
f
执行104
次调用
相似问题:
分析
#1 打表
可以先将所有可能的 <前缀、后缀> 组合都计算出结果,查询时直接返回即可。
|
|
2008 ms
#2 字典树
也可以用前缀、后缀字典树分别保存单词的下标集合。
查询时,先找到前缀、后缀对应的下标集合,再找交集中最大的下标。
为了加速查找交集的最大下标,可以用状态压缩代替集合。
解答
|
|
1000 ms