Find Common Characters [Easy] — Min Frequency Intersection
Advertisement
Problem Statement
Given an array of strings, return all characters that appear in all strings (including duplicates, with min frequency across all).
Input: ["bella","label","roller"] → ["e","l","l"]
Intuition
Compute frequency for each string. Take element-wise minimum across all frequency arrays. Expand back to characters.
Solutions
Python
from collections import Counter
def commonChars(words: list[str]) -> list[str]:
min_freq = Counter(words[0])
for word in words[1:]:
min_freq &= Counter(word) # intersection = element-wise min
return list(min_freq.elements())
C++
vector<string> commonChars(vector<string>& words) {
int mn[26]; fill(mn,mn+26,INT_MAX);
for(auto& w:words){
int cnt[26]={};
for(char c:w) cnt[c-'a']++;
for(int i=0;i<26;i++) mn[i]=min(mn[i],cnt[i]);
}
vector<string> res;
for(int i=0;i<26;i++) for(int j=0;j<mn[i];j++) res.push_back(string(1,'a'+i));
return res;
}
Java
public List<String> commonChars(String[] words) {
int[] mn=new int[26]; Arrays.fill(mn,Integer.MAX_VALUE);
for(String w:words){
int[] cnt=new int[26];
for(char c:w.toCharArray()) cnt[c-'a']++;
for(int i=0;i<26;i++) mn[i]=Math.min(mn[i],cnt[i]);
}
List<String> res=new ArrayList<>();
for(int i=0;i<26;i++) for(int j=0;j<mn[i];j++) res.add(String.valueOf((char)('a'+i)));
return res;
}
Complexity
- Time: O(n×m) where m = word length, Space: O(1)
Advertisement