在字符数组java中查找一个单词

我试图从字典列表中找到一个词。字母可以按任何顺序排列,但任何字母只能使用一次。我已经在 Android 上用 java 开发了一个算法,但它并没有真正起作用。--> dict 列表中的所有单词在我的原因中都已经小写了


这是我现有的代码,但它不会向我显示匹配的单词作为输出,返回的列表始终为空。


    private int matches = 0;

    private ArrayList<String> words;


    private ArrayList<String> check(String charArr0) {

        String charArr = charArr0.toLowerCase();

        char[] cs0 = charArr.toCharArray();

        ArrayList<Character> cs = new ArrayList<>();

        for(char c : cs0)

            cs.add(c);

        all = words.size();

        ArrayList<String> out = new ArrayList<>();


        for(String w0 : words) {

            String w = w0.toLowerCase();

            int len = w.length();

            if(len >= 2) {

                //only if len is 2++

                matches = 0;

                checkNext(cs, 0, w, len);

                //if matches are as high as words lenght, it is fully avaivable

                if(matches >= len)

                    out.add(w);

            }

        }


        return out;

    }


    private void checkNext(ArrayList<Character> cs, int pos, String w, int len) {

        if(pos < len) {

            char twc = w.charAt(pos);

            boolean cont = false;

            int cIdx = -1, curi = 0;

            for(char c : cs) {

                if(c == twc){

                    cont = true;

                    cIdx = curi;

                    break;

                }


                curi += 1;

            }


            if(cont) {

                matches += 1;

                cs.remove(cIdx);

                checkNext(cs, pos + 1, w, len);

            }

        }

    }

问题是,这段代码中的错误是什么,我怎么可能从给定的字符数组中的列表中获取一个单词(任何字符只使用一次,顺序无关紧要)?


RISEBY
浏览 176回答 1
1回答

DIEA

因为你定义了这个规则://- The letters can be in any order//- any letter can be used only once我想对每个单词的字符进行排序并检查它们是否相等:List<String> dictionaryWords = ...;String word = "word";char[] wordChars = word.toCharArray();Arrays.sort(wordChars);List<String> foundWords = new ArrayList<>();for(String w : dictionaryWords){&nbsp; &nbsp; if(dictionaryWords.length() != wordChars.length)&nbsp; &nbsp; &nbsp; &nbsp; continue;&nbsp; &nbsp; char[] wordDictionaryChars = w.toCharArray();&nbsp; &nbsp; Arrays.sort(wordDictionaryChars);&nbsp; &nbsp; if(Arrays.equals(wordChars, wordDictionaryChars)){&nbsp; &nbsp; &nbsp; &nbsp; foundWords.add(w);&nbsp; &nbsp; }}考虑你有:List<String> dictionaryWords = new ArrayList<>(Arrays.asList("drow", "hello"));这将返回:[drow]因为当你同时订购它们时word,drow它会给你[d, o, r, w]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java