题目的主要信息:
- 统计输入的一句话中不同字母字符出现的次数
- 使用Map哈希表
具体做法:
既然使用哈希表,我们遍历字符串,对于每个字符,我们首先检查它是否是字母,如果是字母再考虑后续哈希表的行为,非字母跳过就行了。对于字母字符,我们在哈希表中查找它,然后将其value值增加1,如果找不到它就在哈希表中添加一项新的。
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String line = scanner.nextLine();
Map<Character, Integer> map = new LinkedHashMap<Character, Integer>(); //哈希表
for(int i = 0; i < line.length(); i++){ //遍历字符串
char c = line.charAt(i); //对于每个字符
if(Character.isLetter(c)){ //首先检查是否是字母
if(map.containsKey(c)) //如果哈希表中有了这个字母
map.put(c, map.get(c) + 1); //该记录加1
else
map.put(c, 1); //否则加入一个新的记录
}
}
Set<Map.Entry<Character, Integer>> entrys = map.entrySet();
for (Map.Entry<Character, Integer> entry : entrys) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
}
复杂度分析:
- 时间复杂度:,其中为字符串长度,遍历整个字符串
- 空间复杂度:,哈希表的大小最大为字符集即字母个数,属于常数空间