1002. Find Common Characters

LeetCode easy original: C# #array #csharp #easy #leetcode #math #search #string
選択した UI 言語に合わせて問題文をロシア語から翻訳します。コードは変更しません。

Если задан 配列 строк words, return 配列 всех символов, которые встречаются во всех 文字列х внутри слов (включая дубликаты). Вы можете вернуть ответ в любом порядке.

例:

Input: words = ["bella","label","roller"]

Output: ["e","l","l"]

C# 解法

照合済み/オリジナル
public class Solution {
    public IList<string> CommonChars(string[] words) {
        int[] minFreq = new int[26];
        Array.Fill(minFreq, int.MaxValue);
        
        foreach (string word in words) {
            int[] freq = new int[26];
            foreach (char c in word) {
                freq[c - 'a']++;
            }
            for (int i = 0; i < 26; i++) {
                minFreq[i] = Math.Min(minFreq[i], freq[i]);
            }
        }
        
        IList<string> result = new List<string>();
        for (int i = 0; i < 26; i++) {
            for (int j = 0; j < minFreq[i]; j++) {
                result.Add(((char)('a' + i)).ToString());
            }
        }
        return result;
    }
}

C++ 解法

自動ドラフト、提出前に確認
#include <bits/stdc++.h>
using namespace std;

// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
    public vector<string> CommonChars(vector<string> words) {
        vector<int>& minFreq = new int[26];
        Array.Fill(minFreq, int.MaxValue);
        
        foreach (string word in words) {
            vector<int>& freq = new int[26];
            foreach (char c in word) {
                freq[c - 'a']++;
            }
            for (int i = 0; i < 26; i++) {
                minFreq[i] = min(minFreq[i], freq[i]);
            }
        }
        
        vector<string> result = new List<string>();
        for (int i = 0; i < 26; i++) {
            for (int j = 0; j < minFreq[i]; j++) {
                result.push_back(((char)('a' + i)).ToString());
            }
        }
        return result;
    }
}

Java 解法

照合済み/オリジナル
public class Solution {
    public List<String> commonChars(String[] words) {
        int[] minFreq = new int[26];
        Arrays.fill(minFreq, Integer.MAX_VALUE);
        
        for (String word : words) {
            int[] freq = new int[26];
            for (char c : word.toCharArray()) {
                freq[c - 'a']++;
            }
            for (int i = 0; i < 26; i++) {
                minFreq[i] = Math.min(minFreq[i], freq[i]);
            }
        }
        
        List<String> result = new ArrayList<>();
        for (int i = 0; i < 26; i++) {
            for (int j = 0; j < minFreq[i]; j++) {
                result.add(Character.toString((char)('a' + i)));
            }
        }
        return result;
    }
}

JavaScript 解法

照合済み/オリジナル
class Solution {
    commonChars(words) {
        const minFreq = new Array(26).fill(Infinity);
        
        for (const word of words) {
            const freq = new Array(26).fill(0);
            for (const char of word) {
                freq[char.charCodeAt() - 97]++;
            }
            for (let i = 0; i < 26; i++) {
                minFreq[i] = Math.min(minFreq[i], freq[i]);
            }
        }
        
        const result = [];
        for (let i = 0; i < 26; i++) {
            for (let j = 0; j < minFreq[i]; j++) {
                result.push(String.fromCharCode(97 + i));
            }
        }
        return result;
    }
}

Algorithm

Инициализация частотного 配列а:

Создайте 配列 для хранения минимальной частоты каждого символа, который будет встречаться во всех словах.

Обработка каждого слова:

Для каждого слова создайте временный 配列 для хранения частоты каждого символа в этом слове.

Обновите основной частотный 配列, сравнивая его с временным 配列ом и сохраняя минимальные частоты каждого символа.

Формирование результата:

Создайте результирующий 配列, добавляя каждый символ столько раз, сколько его минимальная частота.

😎

Vacancies for this task

有効な求人 with overlapping task tags are 表示.

すべての求人
有効な求人はまだありません。