TreeMap-如何查找以字母的每个字母开头的单词数

时间:2018-10-02 19:58:15

标签: java list loops dictionary treemap

所以我有一个单词列表。例如,{Apple,Available,Art,Before,Beyond,Door,Drive,......}

我想显示以每个字母开头的单词数,因此结果应为A = 3,B = 2,D = 2 ......

这是我编写的代码,但是显然它不像我想要的那样工作。

    Map<String, Integer> myMap = new TreeMap<String, Integer>();

    for (int i = 0; i < theWords.length; i++) {
        for (char alphabet = 'A'; alphabet <= 'Z'; alphabet++) {
            int numOfWords = 0;
            char firstLetter = theWords[i].charAt(0);
            if (firstLetter == alphabet) {
                myMap.put(String.valueOf(alphabet), numOfWords + 1);
            }
        }   
    }
    System.out.println(myMap);

这就是我得到的结果...

{A=1, B=1, C=1, D=1, E=1, F=1, G=1, H=1, J=1, K=1, L=1, M=1, N=1, O=1, P=1, Q=1, R=1, S=1, T=1, U=1, W=1, Y=1}

P.S。我必须使用TreeMap。

3 个答案:

答案 0 :(得分:2)

您可以获取第一个字符并添加到地图中,而不是使用双循环。

类似于:

for (String fruit : theFruits) {
  String firstLetter = fruit.substring(0, 1);
  Integer count = myMap.get(firstLetter);
  if (count == null) {
    myMap.put(firstLetter, 1);
  }
  else {
    myMap.put(firstLetter, ++count);
  }
}

答案 1 :(得分:1)

您可以在内环中设置int numOfWords = 0;-就是这种情况。 这就是为什么总是1放在地图中

答案 2 :(得分:0)

Map将键与值映射,其中键是唯一的。

  1. 创建地图。
  2. 对于列表中的每个单词,获取第一个字符。
  3. 查看地图的键集中是否存在获取的字符。
  4. 如果存在,则只需增加该键的计数,否则在地图上进行新输入并将计数保持为1。

对于您的问题,您可以简单地采用大小为26的类型react-scripts的数组。这将作为您的地图。

第0个索引用于int,第一个索引用于a,依此类推,直到第25个索引用于b

现在应用以上逻辑

例如单词列表为

z

假设:小写单词,每个单词仅包含26个小写英文字母,所有单词都是唯一的。如果需要添加其他字符,则需要修改数组的大小,并且对于重复项,可以使用Hashmap替换数组,但算法步骤与上述相同。

P.S。通常,对于前缀搜索,使用Trie是首选解决方案。