我一直试图找出解决这个问题的最佳方法。
我遇到的问题是我需要取用户输入(word)并将其放入数组中并尝试确认/验证他们所使用的所有字母是否都在char数组中(生成10随机字母)(letterpool)然后再次检查他们使用的单词是否在字典中有效。
我有一个名为" dict.txt"其中包含80k字的小写字母 字典。我需要以某种方式获取输入(大写)并能够以小写
找到字典的单词我希望你们能帮助我,编程语言Java 提前谢谢!
埃里克
答案 0 :(得分:0)
我创建一个HashMap<Character, Integer>
并将随机字母放在地图中。
map.put(letter, 0);
然后我会查看你单词中的字母并执行此操作
Integer value = map.get(letterFromYourWord);
if(value == null){
//raise exception because the letter from your word is not in your random array
} else {
// increment the value from the map
map.put(letterFromYourWord, value++);
}
然后浏览地图并检查值是否为0.如果有一个值为0,那么您的单词不会在随机数组中使用。
通过这种实现,您可以轻松扩展更多功能,例如计算单词中使用的字母......
答案 1 :(得分:0)
对于validWord函数,我建议使用二进制搜索来排序数组。这些方面的东西:
static boolean validWord(String word, final char[] letters)
{
char[] lettersCopy = letters.clone();
Arrays.sort(lettersCopy); // sort so we can use binary search
for(char c : word.toCharArray())
{
if(Arrays.binarySearch(lettersCopy, c) < 0) //char c from word not in letterPool?
{
return false;
}
}
return true;
}
然后在你的TRIALS循环中,你可以这样称呼它:
if (validWord(input,letterPool))
{
System.out.println("Yes, the letters match");
}else {
System.out.println("No");
}
我不确定你在那里使用哪个词典类,所以我无法帮助你。
顺便说一下: 使用散列图的Arctigors答案是更高的CPU性能,但在内存方面更加沉重。 (O(n)代替O(n * lb(m)))