코린이의 소소한 공부노트

[LeetCode/Easy] 1002. Find Common Characters 본문

코딩테스트 풀이/JAVA

[LeetCode/Easy] 1002. Find Common Characters

무지맘 2023. 6. 6. 22:42

1. Input

1) String[] words

 

2. Output

1) 각 단어들에 공통으로 나타나는 알파벳을 하나씩 담은 리스트를 반환

- 모든 단어에 a2개씩 있다면 반환하는 리스트에도 a2개 있어야 한다.

- 정렬 순서는 상관 없다.

 

3. Constraint

1) 1 <= words.length <= 100

2) 1 <= words[i].length <= 100

3) words의 모든 단어는 영어 소문자로 이루어져 있다.

 

4. Example

Input: words = ["bella","label","roller"] -> Output: ["e","l","l"]

Input: words = ["cool","lock","cook"] -> Output: ["c","o"]

 

5. Code

1) 첫 코드(2023/06/06)

class Solution {
    public List<String> commonChars(String[] words) {
        HashMap<Character,Integer> m1 = new HashMap<>();
        for(int i=0 ; i<words[0].length() ; i++)
            m1.put(words[0].charAt(i), m1.getOrDefault(words[0].charAt(i),0)+1);
        HashMap<Character,Integer> m2 = new HashMap<>();
        for(int i=1 ; i<words.length ; i++){
            for(int j=0 ; j<words[i].length() ; j++)
                m2.put(words[i].charAt(j), m2.getOrDefault(words[i].charAt(j),0)+1);
            List<Character> removed = new ArrayList<>();
            for(char c : m1.keySet()){
                if(m2.containsKey(c))
                    m1.put(c, Math.min(m1.get(c), m2.get(c)));
                else
                    removed.add(c);
            }
            m2.clear();
            for(char c : removed)
                m1.remove(c);
        }
        List<String> list = new ArrayList<>();
        for(char c : m1.keySet()){
            for(int i=0 ; i<m1.get(c) ; i++)
                list.add(String.valueOf(c));
        }
        return list;
    }
}

- 19%, 8%