본문 바로가기
츄Log/알고리즘 연습장

연습#14

by 츄츄🦭 2023. 12. 13.
728x90

 

안녕하세요!

오늘도 풀었습니다. '애니어그램'이라는 유형의 문제였습니다.

242. Valid Anagram

풀긴 풀었으나 매우 장황하고 복잡하게 풀었습니다.

 

소트, 해시테이블, 배열 등등 풀이법이 다양했는데요.

저는 해시를 사용했습니다.

다시 생각해보면 해시맵을 두개 쓰지 않고

origin 하나를 만들고, 비교대상은 origin의 count를 줄여가는 식으로 접근했어도 됐겠네요!

class Solution {
    public boolean isAnagram(String s, String t) {
        
        if (s.length() != t.length()) {
            return false;
        }

        final Map<String, Integer> origin = new HashMap();
        final Map<String, Integer> transformed = new HashMap();

        for (int i=0; i<s.length(); i++) {
            final String target = s.charAt(i) + "";
            origin.put(target, origin.getOrDefault(target, 0) + 1);
        }

        for (int i=0; i<t.length(); i++) {
            final String target = t.charAt(i) + "";
            transformed.put(target, transformed.getOrDefault(target, 0) + 1);
        }

        for (String key : origin.keySet()) {           
            if (!origin.get(key).equals(transformed.get(key))) {
                return false;
            }
        }

        return true;
    }
}

 

 

그래서 다른 분들의 풀이를 보았습니다. O(n)인 것도 멋있군요.

두 문자열이 나오고 동일한 문자이나 순서가 다른(즉, 애니어그램) 문제가 나왔을 때 접근법을 하나 배운 것 같습니다.

public class Solution {
    public boolean isAnagram(String s, String t) {
        int[] alphabet = new int[26];
        for (int i = 0; i < s.length(); i++) alphabet[s.charAt(i) - 'a']++;
        for (int i = 0; i < t.length(); i++) alphabet[t.charAt(i) - 'a']--;
        for (int i : alphabet) if (i != 0) return false;
        return true;
    }
}

 

 

휴~~~ 난 언제쯤~~ ㅠㅠ

728x90

'츄Log > 알고리즘 연습장' 카테고리의 다른 글

연습#16  (0) 2023.12.14
연습#15  (0) 2023.12.14
연습#13  (0) 2023.12.12
연습#12  (0) 2023.12.12
연습#11 Check if the sentence Is Pangram  (1) 2023.12.11