我正在用Java制作“波格尔”游戏。在我的程序中,一旦我随机生成了游戏板,我有一个方法来遍历所有可能的字母组合,并将每个组合与单词词典列表进行比较,以检查是否是有效的单词,如果是,就将其放入关键字里面。这个方法运行良好,但程序需要花费三到四分钟的时间来生成关键字,这主要是由于单词词典的大小所致。我使用的词典约有19,000个单词,每次比较每个组合都需要很长时间。以下是我试图加速的代码部分:
if (str.length()>3&&!key.contains(str)&&prefixes.contains(str.substring(0,3))&&dictionary.contains(str)){
key.add(str);
}
其中str
是生成的组合。 prefixes
是我基于dictionary
生成的列表,如下所示:
public void buildPrefixes(){
for (String word:dictionary){
if(!prefixes.contains(word.substring(0,3))){
prefixes.add(word.substring(0,3));
}
}
}
这个代码会在字典中添加所有的三个字母前缀,例如"abb"和"mar",这样当str
是类似于"xskfjh"这样的无意义字符串时,它就不会被与整个字典进行比较,而只会与prefixes
进行比较,后者大约有1k个单词。
我的目的是通过仅迭代与str
具有相同首字母的单词来缩短时间,因此如果str
是"abbey",则它只会检查以"a"开头的单词,而不是整个列表,这将显著缩短时间。或者更好的是,它只会检查具有相同前缀的单词。我对Java还很新,所以如果您的答案非常详细,我会非常感激,谢谢!
Set
呢?我有漏掉什么吗? - Sergei Tachenov