题目描述
字典树又称为前缀树或者Trie树,是处理字符串常用的数据结构。假设组成所有单词的字符仅是‘a’~‘z’,请实现字典树的结构,并包含以下四个主要的功能。void insert(String word):添加word,可重复添加;void delete(String word):删除word,如果word添加过多次,仅删除一次;boolean search(String word):查询word是否在字典树中出现过(完整的出现过,前缀式不算);int prefixNumber(String pre):返回以字符串pre作为前缀的单词数量。现在给定一个m,表示有m次操作,每次操作都为以上四种操作之一。每次操作会给定一个整数op和一个字符串word,op代表一个操作码,如果op为1,则代表添加word,op为2则代表删除word,op为3则代表查询word是否在字典树中,op为4代表返回以word为前缀的单词数量(数据保证不会删除不存在的word)。
对于每次操作,如果op为3时,如果word在字典树中,请输出“YES”,否则输出“NO”;如果op为4时,请输出返回以word为前缀的单词数量,其它情况不输出。
示例1
输入:
[[“1”,“qwer”],[“1”,“qwe”],[“3”,“qwer”],[“4”,“q”],[“2”,“qwer”],[“3”,“qwer”],[“4”,“q”]]
返回值:
[“YES”,“2”,“NO”,“1”]
代码
import java.util.*;
public class Solution {
private static String YES = "YES";
private static String NO = "NO";
private Map<String,Integer> wordsMap = new HashMap<>();
// 添加word
private void insert(String word){
if (word.length() == 0){
return;
}
// 添入map中
if (wordsMap.containsKey(word)){
wordsMap.put(word,wordsMap.get(word)+1);
}else{
wordsMap.put(word,1);
}
}
// 删除word,word在前缀树中是必然存在的
private void delete(String word){
if (wordsMap.containsKey(word)){
wordsMap.put(word,wordsMap.get(word)-1);
}
}
// 查询word是否在字典树中出现过
private boolean search(String word){
if (wordsMap.containsKey(word)){
return wordsMap.get(word) != 0;
}
return false;
}
// 返回以字符串pre作为前缀的单词数量
private int prefixNumber(String pre){
int res = 0;
for(String key : wordsMap.keySet()){
if (key.startsWith(pre)){
res = res + wordsMap.get(key);
}
}
return res;
}
/**
*
* @param operators string字符串二维数组 the ops
* @return string字符串一维数组
*/
public String[] trieU (String[][] operators) {
// write code here
List<String> res = new ArrayList<>();
for(int i = 0;i < operators.length;++i){
switch(operators[i][0]){
// 插入
case "1":
insert(operators[i][1]);
break;
// 删除
case "2":
delete(operators[i][1]);
break;
// 查找单词
case "3":
if (search(operators[i][1])){
res.add(YES);
}else{
res.add(NO);
}
break;
// 查找前缀
case "4":
res.add(String.valueOf(prefixNumber(operators[i][1])));
break;
}
}
String[] anw = new String[res.size()];
for (int i = 0;i < anw.length;++i){
anw[i] = res.get(i);
}
return anw;
}
}