❒ Description
날짜 | 2024.09.29 (일) |
레벨 | Easy |
제목 | Valid Anagram |
링크 | https://leetcode.com/problems/valid-anagram/description |
알고리즘 | 정렬 |
시간 복잡도 | O(N) |
❒ Solution
1. Map counter
public boolean isAnagram(String s, String t) {
// 예외
if (s.length() == 1) {
return s.equals(t);
}
// create counter map
Map<Character, Integer> counter = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
char letter = s.charAt(i);
counter.put(letter, counter.getOrDefault(letter, 0) + 1);
}
// t 순회하면서 counter 갱신
for (int i = 0; i < t.length(); i++) {
char letter = t.charAt(i);
if (counter.containsKey(letter)) {
counter.put(letter, counter.get(letter) - 1);
} else {
// counter map에 없는 letter는 새로 추가
counter.put(letter, counter.getOrDefault(letter, 0) + 1);
}
}
// value != 0 ? false
for (Map.Entry<Character, Integer> entry : counter.entrySet()) {
if (entry.getValue() != 0) {
return false;
}
}
return true;
}
2. Sorting
※ 새롭게 안 사실
new String(array)를 하면 배열을 쉽게 문자열로 변환 가능하다.
public boolean isAnagram(String s, String t) {
return sort(s).equals(sort(t));
}
private String sort(String s) {
char[] array = s.toCharArray();
Arrays.sort(array);
return new String(array);
}
3. 배열을 이용한 counter
count[c - 'a']는 응근 유용하게 써먹을 수 있을거 같다.
public boolean isAnagram(String s, String t) {
int[] count = new int[26];
for (char c : s.toCharArray()) count[c - 'a']++;
for (char c : t.toCharArray()) count[c - 'a']--;
for (int answer : count) {
if (answer != 0) {
return false;
}
}
return true;
}
'Algorithm > 문제풀이' 카테고리의 다른 글
[LeetCode#33] Search in Rotated Sorted Array (0) | 2024.10.01 |
---|---|
[LeetCode#75] Sort Colors (0) | 2024.10.01 |
[LeetCode#179] Largest Number (0) | 2024.09.29 |
[LeetCode#147] Insertion Sort List (0) | 2024.09.28 |
[LeetCode#56] Merge Intervals (0) | 2024.09.27 |