본문 바로가기
알고리즘

LeetCode Valid Anagram

by 완기 2023. 7. 28.
728x90
반응형

https://leetcode.com/problems/valid-anagram/description/

 

Valid Anagram - LeetCode

Can you solve this real interview question? Valid Anagram - 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

leetcode.com

 

이 문제는 애너그램에 관한 문제다.

 

애너그램이란 특정 문자를 재배치했을 때, 인풋으로 주어지는 t를 만들 수 있는지 판별하는 문제다.

 

문제 설명

 

 

내 풀이

class Solution {
    public boolean isAnagram(String s, String t) {
        Map<Character, Integer> map = new HashMap<>();
        for (char c : s.toCharArray())
            map.put(c, map.getOrDefault(c, 0) + 1);

        for (char c : t.toCharArray()) {
            if (map.get(c) == null || map.get(c) == 0)
                return false;

            if (map.get(c) - 1 == 0) {
                map.remove(c);
                continue;
            }
            
            map.put(c, map.get(c) - 1);
        }

        return map.size() == 0;
    }
}

나는 각 문자열이 몇 개가 있는지 파악한 후, 결과 문자열인 t를 기준으로 맵에서 문자를 하나씩 제거했다.

 

문자열 t에는 있는 알파벳이지만 Map에 없다면 만들 수 없으므로 바로 false를 리턴하고,

 

Map에 저장된 값이 0이라면 해당 문자열은 다 나왔다는 의미이므로 remove 해주고,

 

t의 길이만큼 반복문이 순회한 다음, Map에 Size가 0보다 크다면 문자열 s에는 있는 알파벳이지만 t에는 없다는 의미이므로 

false를 리턴한다.

 

 

 

다른 풀이

class Solution {
    public boolean isAnagram(String s, String t) {
        char[] sArray = s.toCharArray();
        char[] tArray = t.toCharArray();
        Arrays.sort(sArray);
        Arrays.sort(tArray);

        return Arrays.toString(sArray).equals(Arrays.toString(tArray));
    }
}

다른 방법은 뭐가 있을까 생각해 보다가 s를 재배치해서 t를 만들 수 있다면 

정렬하면 똑같은 원소들을 가진 배열 2개가 생성된다고 생각했고,

char원소 배열 두가지를 다 정렬 후, toString을 했을 때, 같은 원소를 가지는지 판별해 봤다.

728x90
728x90

댓글