Pagini recente » Cod sursa (job #1252426) | Cod sursa (job #2876560) | Cod sursa (job #2683291)
import java.io.*;
import java.util.HashMap;
import java.util.Scanner;
public class Main {
static Node root = new Node(0);
public static void main(String []args) {
File inputFile = new File("trie.in");
File outputFile = new File("trie.out");
try {
FileInputStream inputStream = new FileInputStream(inputFile);
Scanner scanner = new Scanner(inputStream);
FileOutputStream outputStream = new FileOutputStream(outputFile);
PrintWriter writer = new PrintWriter(outputStream);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
String[] split = line.split(" ");
int command = Integer.parseInt(split[0]);
if (command == 0)
insert(split[1]);
if (command == 1)
delete(split[1]);
if (command == 2)
count(split[1], writer);
if (command == 3)
findmax(split[1], writer);
}
writer.close();
outputStream.close();
} catch(IOException e) {
}
}
private static void findmax(String s, PrintWriter writer) {
int currentLevel = 0;
//int maxLength = 0;
Node currentNode = root;
for (char character: s.toCharArray()) {
if (!currentNode.children.containsKey(character)) {
//maxLength = 0; it doesn't have to be a full word!
break;
}
currentNode = currentNode.children.get(character);
if (currentNode.passesThrough > 0)
currentLevel++;
else
break;
//if (currentNode.occurences > 0) - doesn't have to be a full word
// maxLength = currentLevel;
}
//writer.println(maxLength);
writer.println(currentLevel);
}
private static void count(String s, PrintWriter writer) {
Node currentNode = root;
int toPrint = 0;
for (char character: s.toCharArray()) {
if (!currentNode.children.containsKey(character)) {
toPrint = 0;
break;
}
currentNode = currentNode.children.get(character);
toPrint = currentNode.occurences;
}
writer.println(toPrint);
}
private static void delete(String s) {
Node currentNode = root;
for (char character: s.toCharArray()) {
currentNode = currentNode.children.get(character);
currentNode.passesThrough--;
}
currentNode.occurences--;
}
private static void insert(String s) {
Node currentNode = root;
for (char character: s.toCharArray()) {
if (!currentNode.children.containsKey(character))
currentNode.children.put(character, new Node(0));
currentNode = currentNode.children.get(character);
currentNode.passesThrough++;
}
currentNode.occurences++;
}
static class Node{
public HashMap<Character, Node> children = new HashMap<Character, Node>(){};
public int occurences = 0;
public int passesThrough = 0;
public Node(int i) {
occurences = i;
}
}
}