JIAKAOBO

LeetCode

venmo
wechat

感谢赞助!

  • ㊗️
  • 大家
  • offer
  • 多多!

Problem

Given an array words of strings made only from lowercase letters, return a list of all characters that show up in all strings within the list (including duplicates). For example, if a character occurs 3 times in all strings but not 4 times, you need to include that character three times in the final answer.

You may return the answer in any order.

Example 1:

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

Example 2:

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

Code

class Solution {
    public List<String> commonChars(String[] words) {
        int[] dict =  build(words[0]);
        for(int i = 1; i < words.length; i++) {
            String word = words[i];
            int[] curr = build(word);
            for(int j = 0; j < 26; j++) {
                dict[j] = Math.min(dict[j], curr[j]);
            }
        }

        List<String> res = new ArrayList<>();
        for(int i = 0; i < 26; i++) {
            if(dict[i] != 0) {
                int count = dict[i];
                String letter = Character.toString('a' + i);
                for(int j = 0; j < count; j++) {
                    res.add(letter);
                }
            }
        }

        return res;
    }

    private int[] build(String s) {
        int[] dict = new int[26];
        for(char c : s.toCharArray()) {
            dict[c - 'a']++;
        }

        return dict;
    }
}