본문 바로가기
Leetcode

242. Valid Anagram

by Doromi 2023. 11. 7.
728x90
반응형
두 개의 문자열을 비교하여 하나의 문자열이 다른 문자열의 애너그램(Anagram)인지 확인하는 문제입니다. 애너그램은 같은 문자를 사용하여 다른 순서로 재배열한 문자열을 의미합니다. 예를 들어, "listen"은 "silent"의 애너그램입니다.

 

두 문자열의 길이가 다르다면, 두 문자열은 애너그램이 될 수 없으므로 false를 반환합니다.

두 문자열의 길이가 동일하다면, 각 문자열의 문자 빈도를 저장하기 위한 데이터 구조(예: 딕셔너리)를 만듭니다.

첫 번째 문자열을 반복하면서 각 문자의 빈도를 업데이트합니다.

두 번째 문자열을 반복하면서 첫 번째 문자열의 빈도와 비교하며 빈도를 감소시킵니다.

두 번째 문자열을 순회하면서 빈도를 감소시킬 때, 해당 문자가 두 번째 문자열에 없거나 이미 빈도가 0이라면 두 문자열은 애너그램이 아닙니다.

마지막으로, 모든 문자 빈도가 0이면 두 문자열은 애너그램입니다.

 

public bool IsAnagram(string s, string t) {
        if(s.Length != t.Length){
            return false;
        }
        Dictionary<char,int> dic = new Dictionary<char,int>();

        foreach(char ch in s){
           if(!dic.ContainsKey(ch)){
            dic[ch]=1;
           }
           else{
               dic[ch]++;
           }
        }
        foreach(char ch in t){
           if(dic.ContainsKey(ch)){
            dic[ch]--;
           }
           else{
              return false;
           }
        }
        foreach(int count in dic.Values){
            if(count != 0){
                return false;
            }
        }
        return true;
    }
두 문자열이 애너그램인지 확인하기 위해 문자 빈도를 사용하고, 빈도가 서로 일치하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
728x90
반응형

'Leetcode' 카테고리의 다른 글

350. Intersection of Two Arrays II  (0) 2023.11.07
349. Intersection of Two Arrays  (0) 2023.11.07
168. Excel Sheet Column Title  (0) 2023.11.06
145. Binary Tree Postorder Traversal  (0) 2023.11.05
141. Linked List Cycle  (0) 2023.11.05