如何检查单词是否在字典中,并将用户输入插入到数组中

时间:2016-05-23 09:46:35

标签: arrays validation dictionary input

我一直试图找出解决这个问题的最佳方法。

我遇到的问题是我需要取用户输入(word)并将其放入数组中并尝试确认/验证他们所使用的所有字母是否都在char数组中(生成10随机字母)(letterpool)然后再次检查他们使用的单词是否在字典中有效。

我有一个名为" dict.txt"其中包含80k字的小写字母 字典。我需要以某种方式获取输入(大写)并能够以小写

找到字典的单词

我希望你们能帮助我,编程语言Java 提前谢谢!

埃里克

2 个答案:

答案 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)))