Три преобразования не найдены - PullRequest
0 голосов
/ 16 марта 2012

Я столкнулся с проблемой при использовании 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());
...