Найдите количество слов с префиксом, используя структуру данных Trie.
Я пытаюсь решить проблему контактов на Hackerrank с помощью Trie. Я использовал итеративный подход. После отправки кода все тестовые примеры прошли, кроме перечисленных ниже.
Это мой код
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