본문 바로가기
Algorithm

[Algorithm][Array] 문제 풀이 #15 - Group Anagrams

by Lee David 2022. 7. 28.
반응형
문제 링크

https://leetcode.com/problems/group-anagrams/

 

문제 설명

배열에 있는 문자들끼리의 아나그램을 구하고 그룹핑 시켜라

내 코드
public List<List<String>> groupAnagrams(String[] strs) {
    List<List<String>> results = new ArrayList<>();
    List<String> stringList = new ArrayList<>();
    stringList.add(strs[0]);

    results.add(stringList);

    for(int i = 1; i < strs.length; i++) {
        boolean add = true;
        for(List<String> result : results) {
            String r = result.get(0);
            if(isAnagram(r, strs[i])) {
                result.add(strs[i]);
                add = false;
                break;
            }
        }

        if(add) {
            stringList = new ArrayList();
            stringList.add(strs[i]);
            results.add(stringList);
        }

    }

    return results;
}

private boolean isAnagram(String s, String t) {
    if(s.length() != t.length()) return false;

    int[] arr = new int[128];

    for(int i = 0; i < s.length(); i++) arr[s.charAt(i)]++;
    for(int i = 0; i < t.length(); i++) arr[t.charAt(i)]--;

    for(int i = 0; i < arr.length; i++) {
        if(arr[i] != 0) return false;
    }

    return true;
}
결과

답은 다 맞았지만 이중 for문으로 인해 O(n)의 조건을 맞추지 못하였다.

답안중에 hashmap을 이용한 문제 풀이를 적용하자 깔끔하게 해결!!

map이랑 더 친해지는게 답인거 같다.

반응형