Leetcode una pregunta del día: 1002.find-common-characters (buscar caracteres comunes)

Inserte la descripción de la imagen aquí
Idea: use el método de fuerza bruta para encontrar la cadena más corta short_string, y luego busque el número de carácter c en A para cada carácter c en él. El número mínimo es el número de apariciones de c en todas las cadenas; el método de conteo también se puede usar , Es decir, encuentre la intersección del número de caracteres entre cada cadena;

Ley de violencia:
Inserte la descripción de la imagen aquí

class Solution {
    
    
public:
    vector<string> commonChars(vector<string> &A)
    {
    
    
        vector<string> res;
        //先找出最短的字符串
        string short_string = "";
        int short_size = A[0].size();
        int short_index = 0;
        int len = A.size();
        for (int i = 0; i < len; i++)
        {
    
    
            if (A[i].size() < short_size)
            {
    
    
                short_size = A[i].size();
                short_index = i;
            }
        }

        short_string = A[short_index];
        len = short_string.size();
        sort(short_string.begin(), short_string.end());

        for (int i = 0; i < len;)
        {
    
    
            char c = short_string[i];
            int min_count = len;
            for (string s : A)
            {
    
    
                int count = 0;
                for (char x : s)
                {
    
    
                    if (x == c)
                    {
    
    
                        count++;
                    }
                }
                if (count < min_count)
                {
    
    
                    min_count = count;
                }
            }
            while (min_count)
            {
    
    
                string temp = "";
                temp.push_back(c);
                res.push_back(temp);
                min_count--;
            }
            while (short_string[++i] == c)
            {
    
    
            }
        }

        return res;
    }
};

Método de conteo:
Inserte la descripción de la imagen aquí

class Solution {
    
    
public:
    vector<string> commonChars(vector<string>& A) {
    
    
        vector<int> minfreq(26, INT_MAX);
        vector<int> freq(26);
        for (const string& word: A) {
    
    
            fill(freq.begin(), freq.end(), 0);
            for (char ch: word) {
    
    
                ++freq[ch - 'a'];
            }
            for (int i = 0; i < 26; ++i) {
    
    
                minfreq[i] = min(minfreq[i], freq[i]);
            }
        }

        vector<string> ans;
        for (int i = 0; i < 26; ++i) {
    
    
            for (int j = 0; j < minfreq[i]; ++j) {
    
    
                ans.emplace_back(1, i + 'a');
            }
        }
        return ans;
    }
};

Supongo que te gusta

Origin blog.csdn.net/wyll19980812/article/details/109073415
Recomendado
Clasificación