• Leetcode 1002. 查找常用字符


    1002. 查找常用字符

     
     
    • 用户通过次数301
    • 用户尝试次数324
    • 通过次数303
    • 提交次数480
    • 题目难度Easy

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

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

    示例 1:

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

    示例 2:

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

    提示:

    1. 1 <= A.length <= 100
    2. 1 <= A[i].length <= 100
    3. A[i][j] 是小写字母
    class Solution {
    public:
        vector<string> commonChars(vector<string>& A) {
            vector<vector<int>> m(A.size(),vector<int>(26,0));
            for(int i=0;i < A.size();i++){
                for(int j=0;j < A[i].size();j++){
                    m[i][A[i][j]-97]++;
                    // cout << A[i][j] << " " << A[i][j]-97 << " ";
                }
            }
            vector<string> res;
            for(int i=0;i < A[0].size();i++){
                
                int flag = 1;
                for(int k=0;k < m.size();k++){
                    if(!m[k][A[0][i]-97]){flag=0;break;} //没有这个char
                }
                if(flag){
                    for(int k=0;k < m.size();k++){
                        m[k][A[0][i]-97]--;
                    }
                    cout << A[0][i] << " ";
                    string temp = " ";temp[0] = A[0][i];
                    res.push_back(temp);
                }
            }
            
            
            return res;
            
        }
    };

    _屎山??

    class Solution {
    public:
        int cnt[26],num[26];
        vector<string> commonChars(vector<string>& A) {
            int i;
            for (i=0;i<26;++i) cnt[i]=100000;
            for (auto s:A){
                for (i=0;i<26;++i) num[i]=0;
                for (int i=0;i<(int)s.length();++i){
                    num[s[i]-'a']++;
                }
                for (i=0;i<26;++i) cnt[i]=min(cnt[i],num[i]); // 数到的重复的个数取最少的
            }
            vector<string> vec;
            for (i=0;i<26;++i)if(cnt[i]>0){
                string s="";
                char ch='a'+i;
                s=s+ch;
                for (int j=0;j<cnt[i];++j){
                    vec.push_back(s);
                }
            }
            return vec;
        }
    };

    ——这个复杂度比我低挺多了。

  • 相关阅读:
    [杂题笔记]2021.08.18-2021.09.03,CF#741 Div.2&CF#736 Div.2&CF Global Round15&CF#739 Div3
    第一次博客作业
    《博弈论》
    迭代法-二分迭代求解低阶线性方程
    迭代法-牛顿迭代法
    logback扩展日志输出功能
    log4j2扩展日志输出功能
    c# clr创建mssql的存储过程、函数
    驰骋BPM,工作流
    Docker部署RocketMQ踩坑记录
  • 原文地址:https://www.cnblogs.com/cunyusup/p/10640103.html
Copyright © 2020-2023  润新知