Find Common Characters [Easy] — Min Frequency Intersection

Sanjeev SharmaSanjeev Sharma
1 min read

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

Sanjeev Sharma

Written by

Sanjeev Sharma

Full Stack Engineer · E-mopro