Я столкнулся с проблемой при использовании Trie в Java для решения анаграмм.Следующий код предназначен для Android и не дает никаких результатов перестановки для букв, которые передаются и передаются. Однако, если я реализую тот же код в настольном приложении Java, он вернет мне правильные результаты.Я почти уверен, что что-то не так, просто кажется, я просто не могу это найти.
Код для настольной версии:
static String myWord;
static String myLetters = "";
static char[] myChars;
static TrieNode myNode = new TrieNode();
static TrieNode currentNode;
static ArrayList<String> availableWords = new ArrayList<String>();
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
myLetters = s.next();
readWords();
getPermutations();
}
public static void getPermutations(){
currentNode = myNode;
for(int x = 0; x < myLetters.length(); x++){
if(currentNode.children[myLetters.charAt(x) - 'a'] != null){
availableWords.addAll(currentNode.getWords());
currentNode = currentNode.children[myLetters.charAt(x) - 'a'];
System.out.println("x: " + x + " " + currentNode.getWords() + "" + myLetters.charAt(x));
}
}
System.out.println(availableWords);
}
Desktop Output:
aelpp //(user input from scanner)
x: 0 []a
x: 1 [ae]e
x: 2 [ale, lea]l
x: 3 [leap, pale, peal, plea]p
x: 4 [appel, apple, pepla]p
[ae, ale, lea, leap, pale, peal, plea]
Код Android:
static String myWord;
static char[] myChars;
static TrieNode myNode = new TrieNode();
static TrieNode currentNode;
static ArrayList<String> availableWords = new ArrayList<String>();
public static void getPermutations(String passedInLetters){
currentNode = myNode;
Log.i("TRIE:" , passedInLetters);
for(int x = 0; x < passedInLetters.length(); x++){
if(currentNode.children[passedInLetters.charAt(x) - 'a'] != null){
availableWords.addAll(currentNode.getWords());
Log.i("TRIE:" , "x: " + x + " " + currentNode.getWords());
currentNode = currentNode.children[passedInLetters.charAt(x) - 'a'];
}
}
Log.i("TRIE:", availableWords.toString());
}
Выход журнала Android:
03-15 22:45:11.670: I/TRIE:(4286): aelpp
03-15 22:45:11.670: I/TRIE:(4286): x: 0 []
03-15 22:45:11.670: I/TRIE:(4286): x: 1 []
03-15 22:45:11.670: I/TRIE:(4286): x: 2 []
03-15 22:45:11.670: I/TRIE:(4286): x: 3 []
03-15 22:45:11.670: I/TRIE:(4286): x: 4 []
03-15 22:45:11.670: I/TRIE:(4286): []
Если необходимо, вотполные классы:
Рабочий стол: http://pastie.org/3604515 Android: http://pastie.org/3604513
Я изучал этот пост среди некоторых других моих источников: Перестановки строк Java и их комбинацииlookup
Спасибо!
EDIT:
Эти строки необходимо переключить внутри оператора if:
currentNode = currentNode.children[passedInLetters.charAt(x) - 'a'];
availableWords.addAll(currentNode.getWords());