首页 > 其他 > 详细

LeedCode刷题:1002.查找常用字符

时间:2021-04-10 22:31:50      阅读:17      评论:0      收藏:0      [点我收藏+]

解题思想:字符串中字符出现频率取交集,最终将交集中的字符都计入结果

创建一个最小频率数组minfreq,和临时频率数组tmp;

遍历字符串数组,每次遍历前将临时tmp置0,然后计算每个字符频率,遍历一个字符串后就将tmp和minfreq进行取交集,即更新minfreq值

最终构造结果集,对26个字母的公共最小出现频率计入结果

class Solution {
public:
    vector<string> commonChars(vector<string>& A) {
        // 构造两个数组,存放字符出现频率和最小出现频率
        vector<int> minfreq(26,INT_MAX);
        vector<int> freq(26);//遍历每个字符串时来临时存放出现频率
        // 遍历A,且每次遍历都要freq置全0
        // 统计每个字符串中每个字符出现频率
        for(const string &word:A){
            fill(freq.begin(),freq.end(),0);//清空
            for(char c:word){//遍历字符
                freq[c-a]++;//统计
            }
            for(int i=0;i<26;i++){//将每个字符串的freq和minfreq取交集,更新minfreq值
                minfreq[i]=min(minfreq[i],freq[i]);
            }
        }
        // 构造结果集
        vector<string> res;
        // 对26个字符进行统计,有的字符没有在全部字符串中出现,或没出现过,则minfreq为0则不统计
        // 其他出现多次的统统计入结果
        for(int i=0;i<26;i++){
            for(int j=0;j<minfreq[i];j++){
                res.emplace_back(1,i+a);//出现minfreq[i]次,便显示多少次,即插入多少次
            }
        }
        return res;
    }
};

 

LeedCode刷题:1002.查找常用字符

原文:https://www.cnblogs.com/nilbook/p/14641578.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!