두 개의 문자열이 주어진다.
String s , String t
String t 를 재배열하여 String s 를 만들 수 있다면 true,
아니면 false 를 리턴하는 문제
HashMap 을 선언한다.
String s 해당 문자열을 charAt() 을 통해 문자를 추출하여 HashMap 에 추가한다.
key 는 문자, value 는 getOrDefault() 를 통해 0, +1 을 해준다.
String t 해당 문자열을 charAt() 을 통해 문자를 추출하여 HashMap 에 추가한다.
key 는 문자, value 는 getOrDefault() 를 통해 0, -1 을 해준다.
반복문으로 value 를 꺼내어 해당 값이 0 이 아니라면 false 를 리턴한다.
조건문에 걸리지 않는다면 true 를 리턴한다.
이 문제 역시 getOrDefault() 메서드가 시간 복잡도 효율을 저하시키는 것 같다.
다른 로직들은 시간 복잡도 효율적인 것 같은데 Map 을 사용한다면 불가피한 것 같다.
(문자열을 charAt() 을 통해 배열에 저장하고 sort() 메서드를 통해 정렬하고 두 배열을 비교한다면
더 나은 시간복잡도가 나오지만 Map 을 사용하지 않는다.)
public boolean isAnagram(String s, String t) {
Map<Character, Integer> map = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
char word = s.charAt(i);
map.put(word, map.getOrDefault(word, 0) + 1);
}
for (int i = 0; i < t.length(); i++) {
char word = t.charAt(i);
map.put(word, map.getOrDefault(word, 0) - 1);
}
for (Integer value : map.values()) {
if (value != 0) return false;
}
return true;
}
