Учитывая массив A строк, состоящих только из строчных букв, вернуть список всех символов, которые появляются во всех строках в списке (включая дубликаты). Например, если символ встречается 3 раза во всех строках, но не 4 раза, вам нужно включить этот символ три раза в окончательный ответ.

Пример 1:

Input: ["bella","label","roller"]
Output: ["e","l","l"]

Пример 2:

Input: ["cool","lock","cook"]
Output: ["c","o"]

Примечание.

  1. 1 <= A.length <= 100
  2. 1 <= A[i].length <= 100
  3. A[i][j] - строчная буква

Решение: Счетчик для каждого персонажа

Мы должны использовать collections.Counter, что сделает код чистым и читаемым.

collections.Counterподсчитает, сколько раз существует каждый символ.

In [185]: Counter("bella")
Out[185]: Counter({'a': 1, 'b': 1, 'e': 1, 'l': 2})

И мы можем получить пересечение между разными словами.

In [187]: Counter("bella") & Counter("label") & Counter("roller")
Out[187]: Counter({'e': 1, 'l': 2})

Весь код решения:

class Solution:
    def commonChars(self, A: List[str]) -> List[str]:
        from collections import Counter
        counts = Counter(A[0]) 
        for word in A:
            counts &= Counter(word)

        res = []
        for letter, count in counts.items():
            res += [letter] * count
        return res