所以我有一个单词列表。例如,{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。
答案 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将键与值映射,其中键是唯一的。
对于您的问题,您可以简单地采用大小为26的类型react-scripts
的数组。这将作为您的地图。
第0个索引用于int
,第一个索引用于a
,依此类推,直到第25个索引用于b
。
现在应用以上逻辑
例如单词列表为
z
假设:小写单词,每个单词仅包含26个小写英文字母,所有单词都是唯一的。如果需要添加其他字符,则需要修改数组的大小,并且对于重复项,可以使用Hashmap替换数组,但算法步骤与上述相同。
P.S。通常,对于前缀搜索,使用Trie是首选解决方案。