https://leetcode.com/problems/valid-anagram/description/
아스키로 가정하면 그냥 배열에서 증감처리하고 숫자 전부 일치하는지 보면 될 것 같은데
(참고로 아래 코드도 더 리팩터링 가능, 정상적인 anagram이면 둘이 length 같아야 하므로 굳이 두 번 돌 필요 없음. 길이 체크로 가지치고, 한 번만 돌면서 증감처리 가능)
class Solution {
public boolean isAnagram(String s, String t) {
int[] arr = new int[26];
for (char c : s.toCharArray()) {
arr[c - 'a']++;
}
for (char c : t.toCharArray()) {
arr[c - 'a']--;
}
for (int a : arr) {
if (a != 0) {
return false;
}
}
return true;
}
}
문제 Follow up에서 유니코드 케이스도 생각해보란다.
그러면 해시 컬렉션 써야지.
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.containsKey(c)) {
return false;
}
map.put(c, map.get(c) - 1);
if (map.get(c) == 0) {
map.remove(c);
}
}
return map.isEmpty();
}
}