[LeetCode] 242. Valid Anagram

lkdcode·2023년 8월 31일

Algorithm

목록 보기
24/47
post-thumbnail

242. Valid Anagram


문제 분석

두 개의 문자열이 주어진다.
String s , String t

String t 를 재배열하여 String s 를 만들 수 있다면 true,
아니면 false 를 리턴하는 문제


풀이 과정

HashMap 을 선언한다.

String s 해당 문자열을 charAt() 을 통해 문자를 추출하여 HashMap 에 추가한다.
key 는 문자, valuegetOrDefault() 를 통해 0, +1 을 해준다.

String t 해당 문자열을 charAt() 을 통해 문자를 추출하여 HashMap 에 추가한다.
key 는 문자, valuegetOrDefault() 를 통해 0, -1 을 해준다.

반복문으로 value 를 꺼내어 해당 값이 0 이 아니라면 false 를 리턴한다.

조건문에 걸리지 않는다면 true 를 리턴한다.


나의 생각

이 문제 역시 getOrDefault() 메서드가 시간 복잡도 효율을 저하시키는 것 같다.
다른 로직들은 시간 복잡도 효율적인 것 같은데 Map 을 사용한다면 불가피한 것 같다.

(문자열을 charAt() 을 통해 배열에 저장하고 sort() 메서드를 통해 정렬하고 두 배열을 비교한다면
더 나은 시간복잡도가 나오지만 Map 을 사용하지 않는다.)


코드

    public boolean isAnagram(String s, String t) {
        Map<Character, Integer> map = new HashMap<>();

        for (int i = 0; i < s.length(); i++) {
            char word = s.charAt(i);
            map.put(word, map.getOrDefault(word, 0) + 1);
        }

        for (int i = 0; i < t.length(); i++) {
            char word = t.charAt(i);
            map.put(word, map.getOrDefault(word, 0) - 1);
        }

        for (Integer value : map.values()) {
            if (value != 0) return false;
        }

        return true;
    }

profile
되면 한다

0개의 댓글