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;
    }
    
    

All Problems

All Solutions