题目的主要信息:

  • 统计输入的一句话中不同字母字符出现的次数
  • 使用Map哈希表

具体做法:

既然使用哈希表,我们遍历字符串,对于每个字符,我们首先检查它是否是字母,如果是字母再考虑后续哈希表的行为,非字母跳过就行了。对于字母字符,我们在哈希表中查找它,然后将其value值增加1,如果找不到它就在哈希表中添加一项新的。

alt

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());
        }
    }
}

复杂度分析:

  • 时间复杂度:O(n)O(n),其中nn为字符串长度,遍历整个字符串
  • 空间复杂度:O(1)O(1),哈希表的大小最大为字符集即字母个数,属于常数空间