This is my solution to challenge about the “Tries” data structure. Click here to see the challenge.
import java.io.*; import java.util.*; import java.text.*; import java.math.*; import java.util.regex.*; class Node{ Node[] children = new Node[26]; int completeChildren = 0; } public class Solution { static Node head; public static void main(String[] args) { head = new Node(); List searchResults = new ArrayList(); Scanner in = new Scanner(System.in); int n = in.nextInt(); for(int a0 = 0; a0 < n; a0++){ String op = in.next(); String contact = in.next(); if(op.equals("add")){ addContact(contact); }else if(op.equals("find")){ searchResults.add(countOccurances(contact)); } } printResult(searchResults); } public static void printResult(List searchResults){ for(Integer result:searchResults){ System.out.println(result); } } public static int countOccurances(String term){ Node currentNode = head; for(int i=0; i < term.length();i++){ char c = term.charAt(i); currentNode = currentNode.children[getCode(c)]; if(currentNode == null ){ return 0; } } return currentNode.completeChildren; } public static int getCode(char c){ return c - ((int) 'a'); } public static void addContact(String contact){ if(contact == ""){ return; } Node currentNode = head ; for(int i=0; i < contact.length();i++){ char c = contact.charAt(i); currentNode = getOrAddNode(currentNode, c); } return; } public static Node getOrAddNode(Node node, char c){ Node nextChild = node.children[getCode(c)]; if(nextChild != null){ nextChild.completeChildren++; }else{ nextChild = new Node(); nextChild.completeChildren++; node.children[getCode(c)]= nextChild; } return nextChild; } }