我正在使用Trie在Hackerrank上尝试Contacts问题。我使用了迭代方法。提交代码后,除了下面列出的测试用例外,所有测试用例都已通过。
这是我的代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
class TrieNode{
HashMap<Character,TrieNode> children;
boolean endOfWord;
int size=0;
TrieNode(){
children=new HashMap<Character, TrieNode>();
endOfWord=false;
}
}
public class ContactsUsingTrie {
TrieNode root;
ContactsUsingTrie(){
root=new TrieNode();
}
public void insert(String word){
TrieNode current=root;
TrieNode node;
for(int i=0;i<word.length();i++){
current.size++;
Character ch=word.charAt(i);
node=current.children.get(ch);
if(node==null){
node=new TrieNode();
current.children.put(ch, node);
}
current=node;
}
current.endOfWord=true;
}
public int find(String partial){
TrieNode current=root;
TrieNode node;
for(int i=0;i<partial.length();i++){
Character ch=partial.charAt(i);
node=current.children.get(ch);
if(node==null){
return 0;
}
current=node;
}
return current.size;
}
public static void main(String[] args) {
ContactsUsingTrie trie=new ContactsUsingTrie();
BufferedReader bf=new BufferedReader(new InputStreamReader(System.in) );
String str[];
try {
int T=Integer.parseInt(bf.readLine());
for(int i=0;i<T;i++){
str = bf.readLine().split(" ");
if(str[0].equals("add")){
trie.insert(str[1]);
}else{
System.out.println(trie.find(str[1]));
}
}
}catch (IOException e) {
e.printStackTrace();
}
}
}
和失败的测试用例是
输入:
11
add s
add ss
add sss
add ssss
add sssss
find s
find ss
find sss
find ssss
find sssss
find ssssss
,输出应为
5
4
3
2
1
0
有人可以解释我哪里错了。任何帮助将不胜感激。谢谢 就我而言,输出是
4
3
2
1
0
0