09 Sept 2026Go / Python / TypeScriptEasy

Find Common Characters

Return every character shared by all words, preserving multiplicity.

Maintain the minimum frequency for each letter across all words, then emit every letter that many times.

complexity

O(total characters) time and O(1) auxiliary space for 26 counters.

solution files

  • Go find-common-characters/solution.go
  • Python find-common-characters/solution.py
  • TypeScript find-common-characters/solution.ts

Solution files

Gofind-common-characters/solution.go
package main

func commonChars(words []string) []string {
	common := [26]int{}
	for index := range common {
		common[index] = 101
	}
	for _, word := range words {
		count := [26]int{}
		for _, character := range word {
			count[character-'a']++
		}
		for index := range common {
			if count[index] < common[index] {
				common[index] = count[index]
			}
		}
	}
	result := []string{}
	for index, count := range common {
		for used := 0; used < count; used++ {
			result = append(result, string(rune('a'+index)))
		}
	}
	return result
}
Pythonfind-common-characters/solution.py
from collections import Counter


class Solution:
    def commonChars(self, words: list[str]) -> list[str]:
        common = Counter(words[class="syntax-number">0])
        for word in words[class="syntax-number">1:]: common &= Counter(word)
        return list(common.elements())
TypeScriptfind-common-characters/solution.ts
function commonChars(words: string[]): string[] {
  const common = new Array<number>(class="syntax-number">26).fill(Number.POSITIVE_INFINITY);
  for (const word of words) { const count = new Array<number>(class="syntax-number">26).fill(class="syntax-number">0); for (const character of word) count[character.charCodeAt(class="syntax-number">0) - class="syntax-number">97] += class="syntax-number">1; for (let index = class="syntax-number">0; index < class="syntax-number">26; index += class="syntax-number">1) common[index] = Math.min(common[index], count[index]); }
  const result: string[] = []; common.forEach((count, index) => { for (let used = class="syntax-number">0; used < count; used += class="syntax-number">1) result.push(String.fromCharCode(class="syntax-number">97 + index)); }); return result;
}