[알고리즘] Valid Anagram

NOH-ING·2023년 12월 23일

알고리즘

목록 보기
8/9

문제 정보

출처 : leetcode
난이도 : easy

[문제]
Given two strings s and t, return true if t is an anagram of s, and false otherwise.

An Anagram is a word or phrase formed by rearranging the letters of a different word or phrase, typically using all the original letters exactly once.

[예제]
Input: s = "anagram", t = "nagaram"
Output: true

Input: s = "rat", t = "car"
Output: false

내풀이

위 문제를 푸는 방법은 두가지를 생각했다.
첫번째는 s와 t를 sort 후에 두 String 비교하기.
두번째는 s를 hashmap에 넣고 t와 알파벳 갯수를 비교하기.

sort를 해주는 것이 시간이 더 걸리기때문에 두번째를 택했다.

아래 풀이의 시간복잡도는 O(N), 공간복잡도 또한 O(N)이 나온다.

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

        Map<Character, Integer> sMap = makeMap(s);

        for (char c : t.toCharArray()) {
            if (!sMap.containsKey(c)) {
                return false;
            }

            if (sMap.containsKey(c) && sMap.get(c) < 1) {
                return false;
            }

            int count = sMap.get(c);
            sMap.put(c, count-1);
        }

        return true;
    }

    private Map<Character, Integer> makeMap(String s) {
        Map<Character, Integer> map = new HashMap<>();
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            int count = map.getOrDefault(c, 0);

            map.put(c, count + 1);
        }

        return map;
    }
}
profile
성장하는 중입니다.

0개의 댓글