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 <= 1041 <= words[i].length <= 71 <= pref.length, suff.length <= 7words[i]、pref和suff仅由小写英文字母组成- 最多对函数 
f执行104次调用 
相似问题:
分析
#1 打表
可以先将所有可能的 <前缀、后缀> 组合都计算出结果,查询时直接返回即可。
 | 
 | 
2008 ms
#2 字典树
- 也可以用前缀、后缀字典树分别保存单词的下标集合
 - 查询时,先找到前缀、后缀对应的下标集合,再找交集中最大的下标
 - 为了加速查找交集的最大下标,可以用状态压缩代替集合
 
解答
 | 
 | 
1000 ms