Bem, eu tenho uma duvida sobre como efeturar uma busca. Eu tenho uma Árvore Trie, construida utilizando HashMap. Tenho o metodo de inserção e um metodo para falar se a String esta na Trie. Eu preciso construir agora, um metodo que me retorne uma String que se aproxime da palavra que foi buscada.
Ex: Se eu tiver na Trie a String goleiro e procurar pela String gol, eu tenho q retornar a String goleiro.
Se eu tiver na Trie a String goleiro_rogerio e pesquisar por goleiro, ele me retorne goleiro_rogerio.
A ideia é retornar uma palavra que contenha o mesmo prefixo. Alguém pode me ajudar?
import java.util.*;
public class Trie {
// raiz da trie
HashMap<Character, HashMap> root;
// instancia da trie
public Trie() {
root = new HashMap<Character, HashMap>();
}
// inserção da string na trie
public void add(String s) {
HashMap<Character, HashMap> curr_node = root;
for (int i = 0, n = s.length(); i < n; i++) {
Character c = s.charAt(i);
if (curr_node.containsKey(c))
curr_node = curr_node.get(c);
else {
curr_node.put(c, new HashMap<Character, HashMap>());
curr_node = curr_node.get(c);
}
}
curr_node.put('\0', new HashMap<Character, HashMap>(0));
}
// verifica se a trie contem a string passada como parametro
public boolean contains(String s) {
HashMap<Character, HashMap> curr_node = root;
for (int i = 0, n = s.length(); i < n; i++) {
Character c = s.charAt(i);
if (curr_node.containsKey(c))
curr_node = curr_node.get(c);
else
return false;
}
if (curr_node.containsKey('\0'))
return true;
else
return false;
}
}