LeetCode_1002:查找常用字符

题目描述

给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表。例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包含该字符 3 次。

你可以按任意顺序返回答案。

示例1:

输入:["bella","label","roller"]
输出:["e","l","l"]

示例2:

输入:["cool","lock","cook"]
输出:["c","o"]

提示:

1 <= A.length <= 100
1 <= A[i].length <= 100
A[i][j] 是小写字母

解题思路

class Solution {
public:
    vector commonChars(vector& A) {
        if (A.size() < 1) return {};
        
        vector ans;
        unordered_map um;
        
        for (const char &each_ch : A[0])
            ++um[each_ch];
        
        for (int i = 1; i < A.size(); ++i)
        {
            // 统计单个单词
            int hash[26] = {0};
            for (const char &each_ch : A[i])
                ++hash[each_ch - 'a'];
            
            // 记录单个单词中字母出现的情况
            for (auto it = um.begin(); it != um.end(); )
            {
                if (hash[it->first - 'a'])
                {
                    it->second = std::min(it->second, hash[it->first - 'a']);
                    ++it;
                }
                else
                    it = um.erase(it);
            }
        }
        
        // 将符合题意的字符记录进答案
        for (const auto &each : um)
        {
            for (int num = each.second; num; --num)
                ans.push_back(string(1, each.first));
        }
        
        return ans;
    }
};

你可能感兴趣的:(编程题)