Найдите количество слов с префиксом, используя структуру данных 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

0 ответов

Другие вопросы по тегам