Contacts
import java.io.*;
import java.math.*;
import java.text.*;
import java.util.*;
import java.util.regex.*;
public class Solution {
// Alphabet size (# of symbols)
static final int ALPHABET_SIZE = 26;
// trie node
static class TrieNode {
TrieNode[] children = new TrieNode[ALPHABET_SIZE];
int repeats;
// isEndOfWord is true if the node represents
// end of a word
boolean isEndOfWord;
TrieNode() {
isEndOfWord = false;
repeats = 1;
for (int i = 0; i < ALPHABET_SIZE; i++)
children[i] = null;
}
};
static TrieNode root;
// If not present, inserts key into trie
// If the key is prefix of trie node,
// just marks leaf node
static void insert(String key) {
int level;
int length = key.length();
int index;
TrieNode pCrawl = root;
for (level = 0; level < length; level++) {
index = key.charAt(level) - 'a';
if (pCrawl.children[index] == null)
pCrawl.children[index] = new TrieNode();
else
pCrawl.children[index].repeats++;
pCrawl = pCrawl.children[index];
}
// mark last node as leaf
pCrawl.isEndOfWord = true;
}
// Returns true if key presents in trie, else false
static int countInTrie(String key) {
int level;
int length = key.length();
int index;
TrieNode pCrawl = root;
for (level = 0; level < length; level++) {
index = key.charAt(level) - 'a';
if (pCrawl.children[index] == null)
return 0;
pCrawl = pCrawl.children[index];
}
return pCrawl.repeats;
}
// }
/*
* Complete the contacts function below.
*/
static int[] contacts(String[][] queries) {
root = new TrieNode();
ArrayList<Integer> res = new ArrayList<Integer>();
for (int i = 0; i < queries.length; i++) {
if (queries[i][0].equals("add")) {
insert(queries[i][1]);
} else if (queries[i][0].equals("find")) {
res.add(countInTrie(queries[i][1]));
}
}
int[] result = new int[res.size()];
for (int i = 0; i < result.length; i++) {
result[i] = res.get(i);
}
return result;
}
private static final Scanner scanner = new Scanner(System.in);
public static void main(String[] args) throws IOException {
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));
int queriesRows = Integer.parseInt(scanner.nextLine().trim());
String[][] queries = new String[queriesRows][2];
for (int queriesRowItr = 0; queriesRowItr < queriesRows; queriesRowItr++) {
String[] queriesRowItems = scanner.nextLine().split(" ");
for (int queriesColumnItr = 0; queriesColumnItr < 2; queriesColumnItr++) {
String queriesItem = queriesRowItems[queriesColumnItr];
queries[queriesRowItr][queriesColumnItr] = queriesItem;
}
}
int[] result = contacts(queries);
for (int resultItr = 0; resultItr < result.length; resultItr++) {
bufferedWriter.write(String.valueOf(result[resultItr]));
if (resultItr != result.length - 1) {
bufferedWriter.write("\n");
}
}
bufferedWriter.newLine();
bufferedWriter.close();
}
}
Like this:
Like Loading...
Related