leetcode - 242. Valid Anagram
주제
string, map
문제
- https://leetcode.com/problems/group-anagrams/description/
주어진 두 문자를 애너그램 형태로 변경이 가능하다면 true
, 아니면 false
를 리턴하라
입출력 예시
예시 1
입력: s = "아나그램", t = "나가람"
출력 : true
예시 2
입력: s = "쥐", t = "자동차"
출력 : false
조건
- 1 <= s.length, t.length <= 5 * $10^{4}$
- s소문자 영어 문자로 구성 됩니다 t.
문제풀이
- 핵심 : 아래 예시와 같이 map을 구성한다.
- map의 key: 문자, value: 문자 카운트 숫자
- s의 문자들을 카운트 한 후에 t 문자를 카운트를 빼서 모든 숫자가 0이라면
true
, 0이 아닌 것이 있다면false
예시
s = 'anagram'
map = {
'a' : 3,
'n' : 1,
'g' : 1,
'r' : 1,
'm' : 1
}
- map을 초기화한다.,
- 위의 예시와 같이 만들기 위해 map을 key: 문자, value: 문자 카운트한 수로 만든다.
- 주어진 t 문자열에서 문자들을 key가 같다면 value에서 뺀다.
- 만약에 map안에 0이 아닌 value가 존재한다면
false
를 리턴한다. - 위의 경우가 아닌 경우에 해당하니
true
를 리턴한다.
class Solution {
public boolean isAnagram(String s, String t) {
Map<Character, Integer> counter = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
char key = s.charAt(i);
counter.put(key, counter.getOrDefault(key, 0) + 1);
}
for (int i = 0; i < t.length(); i++) {
char key = t.charAt(i);
counter.put(key, counter.getOrDefault(key, 0) - 1);
}
for (char key : counter.keySet()) {
int value = counter.get(key);
if (value != 0) {
return false;
}
}
return true;
}
}
댓글남기기