1002. Find Common Characters
leetcode easy
Task
Если задан массив строк words, верните массив всех символов, которые встречаются во всех строках внутри слов (включая дубликаты). Вы можете вернуть ответ в любом порядке.
Пример:
Input: words = ["bella","label","roller"]
Output: ["e","l","l"]
C# solution
matched/originalpublic 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++ solution
auto-draft, review before submit#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 solution
matched/originalpublic 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 solution
matched/originalclass 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;
}
}Explanation
Algorithm
Инициализация частотного массива:
Создайте массив для хранения минимальной частоты каждого символа, который будет встречаться во всех словах.
Обработка каждого слова:
Для каждого слова создайте временный массив для хранения частоты каждого символа в этом слове.
Обновите основной частотный массив, сравнивая его с временным массивом и сохраняя минимальные частоты каждого символа.
Формирование результата:
Создайте результирующий массив, добавляя каждый символ столько раз, сколько его минимальная частота.
😎