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 |