[Leetcode] #242. Valid Anagram 두개의 스트링이 같은 개수의 캐릭터들의 조합인지 확인하기

문제 요약

자세한 내용은 leetcode에서 확인

https://leetcode.com/problems/valid-anagram/


두 개의 스트링이 가지고 있는 캐릭터들과 개수가 같은지 확인해라. 캐릭터의 순서는 상관없다.


예제

input: s = "rat", t = "car"

output: false


input: s = "hello", t = "loleh"

output: true


풀이

먼저 두 개의 길이를 비교. 다르면 바로 false 반환.

다음 첫 번째 스트링의 캐릭터들을 카운팅 하여 맵에 저장 후 두 번째 스트링의 캐릭터들을 for loop으로 돌면서 맵에 해당 캐릭터가 있는지 확인하고 카운팅을 감소한다. 만약 맵에 없거나 카운팅이 1보다 작다면 첫 번째 스트링에 없는 캐릭터란 뜻이므로 false를 반환한다.



public boolean isAnagram(String s, String t) {
// 길이가 다르면 탈락
if (s.length() != t.length()) {
return false;
}
// 캐릭터와 카운트를 저장 할 맵 생성
Map<Character, Integer> m = new HashMap<>();
// 스트링 s의 캐릭터 카운팅
for (char c : s.toCharArray()) {
m.put(c, m.getOrDefault(c, 0) + 1);
}
for (char c : t.toCharArray()) {
// 만약 스트링 t의 캐릭터가 맵에 존재하지 않거나 카운트가 0이라면
// 스트링 s와 다른 캐릭터를 가지고 있거나
// 더 많은 해당 캐릭터를 가지고 있다는 뜻이기에 탈락
if (!m.containsKey(c) || m.get(c) < 1) {
return false;
}
// 캐릭터 카운팅 1 감소
m.put(c, m.get(c) - 1);
}
// 여기까지 왔다면 두개의 스트링이 똑같다는 뜻
return true;
}