为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

RISEBY 2021-06-25 18:00:20
我试图从字典列表中找到一个词。字母可以按任何顺序排列,但任何字母只能使用一次。我已经在 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);            }        }    }问题是,这段代码中的错误是什么,我怎么可能从给定的字符数组中的列表中获取一个单词(任何字符只使用一次,顺序无关紧要)?
查看完整描述

1 回答

?
DIEA

TA贡献1820条经验 获得超2个赞

因为你定义了这个规则:


//- 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){

    if(dictionaryWords.length() != wordChars.length)

        continue;

    char[] wordDictionaryChars = w.toCharArray();

    Arrays.sort(wordDictionaryChars);

    if(Arrays.equals(wordChars, wordDictionaryChars)){

        foundWords.add(w);

    }

}

考虑你有:


List<String> dictionaryWords = new ArrayList<>(Arrays.asList("drow", "hello"));

这将返回:


[drow]

因为当你同时订购它们时word,drow它会给你[d, o, r, w]


查看完整回答
反对 回复 2021-06-30
  • 1 回答
  • 0 关注
  • 175 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信