[刷题班] LeetCode1002. 查找共用字符

发布时间 2024-01-08 12:10:22作者: Ac_c0mpany丶

题目描述

思路

关键字:“小写字母”、“出现频率”这些关键字都是为哈希法量身定做的。

求每个字符在所有字符串中最小出现的次数。最小次数为几就在结果集中添加几次该字符。

方法一:

class Solution {
    public List<String> commonChars(String[] words) {
        List<String> res = new ArrayList<>();
        // 用于存储每个字符在所有字符串中出现的最小次数
        int[] arr = new int[26];
        // 计算第一个字符串中每个字符出现的次数
        for (char c : words[0].toCharArray()) {
            arr[c - 'a'] ++;
        } 
        // 遍历其他字符串(类似于打擂)
        for (int i = 1; i < words.length; i ++) {
            int[] temp = new int[26];
            for (char c : words[i].toCharArray()) {
                temp[c - 'a'] ++;
            }
            // 开始打擂
            for (int j = 0; j < 26; j ++) {
                arr[j] = Math.min(arr[j], temp[j]);
            }
        } 
        // 将字符出现最小次数大于0的字符输出到结果中
        for (int i = 0; i < arr.length; i ++) {
            int times = arr[i];
            for (int j = 0; j < times; j ++) {
                res.add(String.valueOf((char)('a' + i)));
            }
        }
        return res;
    }
}