Description#
Given a string array words
, return an array of all characters that show up in all strings within the words
(including duplicates). You may return the answer in any order.
Example 1:
Input: words = ["bella","label","roller"]
Output: ["e","l","l"]
Example 2:
Input: words = ["cool","lock","cook"]
Output: ["c","o"]
Constraints:
1 <= words.length <= 100
1 <= words[i].length <= 100
words[i]
consists of lowercase English letters.
Solutions#
Solution 1#
1
2
3
4
5
6
7
8
9
10
11
| class Solution:
def commonChars(self, words: List[str]) -> List[str]:
cnt = Counter(words[0])
for w in words:
ccnt = Counter(w)
for c in cnt.keys():
cnt[c] = min(cnt[c], ccnt[c])
ans = []
for c, v in cnt.items():
ans.extend([c] * v)
return ans
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| class Solution {
public List<String> commonChars(String[] words) {
int[] cnt = new int[26];
Arrays.fill(cnt, 10000);
for (String w : words) {
int[] ccnt = new int[26];
for (int i = 0; i < w.length(); ++i) {
++ccnt[w.charAt(i) - 'a'];
}
for (int i = 0; i < 26; ++i) {
cnt[i] = Math.min(cnt[i], ccnt[i]);
}
}
List<String> ans = new ArrayList<>();
for (int i = 0; i < 26; ++i) {
while (cnt[i]-- > 0) {
ans.add(String.valueOf((char) (i + 'a')));
}
}
return ans;
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| class Solution {
public:
vector<string> commonChars(vector<string>& words) {
int cnt[26];
memset(cnt, 0x3f, sizeof(cnt));
for (auto& w : words) {
int ccnt[26]{};
for (char& c : w) {
++ccnt[c - 'a'];
}
for (int i = 0; i < 26; ++i) {
cnt[i] = min(cnt[i], ccnt[i]);
}
}
vector<string> ans;
for (int i = 0; i < 26; ++i) {
while (cnt[i]--) {
ans.emplace_back(1, i + 'a');
}
}
return ans;
}
};
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| func commonChars(words []string) (ans []string) {
cnt := [26]int{}
for i := range cnt {
cnt[i] = 1 << 30
}
for _, w := range words {
ccnt := [26]int{}
for _, c := range w {
ccnt[c-'a']++
}
for i, v := range cnt {
cnt[i] = min(v, ccnt[i])
}
}
for i, v := range cnt {
for v > 0 {
ans = append(ans, string(i+'a'))
v--
}
}
return
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| function commonChars(words: string[]): string[] {
const freq: number[] = new Array(26).fill(10000);
for (const word of words) {
const t: number[] = new Array(26).fill(0);
for (const c of word.split('')) {
++t[c.charCodeAt(0) - 'a'.charCodeAt(0)];
}
for (let i = 0; i < 26; ++i) {
freq[i] = Math.min(freq[i], t[i]);
}
}
const res: string[] = [];
for (let i = 0; i < 26; ++i) {
while (freq[i]-- > 0) {
res.push(String.fromCharCode(i + 'a'.charCodeAt(0)));
}
}
return res;
}
|