Welcome to Subscribe On Youtube
1002. Find Common Characters
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
-
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; } }
-
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; } };
-
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
-
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 }
-
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; }