728x90
반응형
https://leetcode.com/problems/valid-anagram/description/
이 문제는 애너그램에 관한 문제다.
애너그램이란 특정 문자를 재배치했을 때, 인풋으로 주어지는 t를 만들 수 있는지 판별하는 문제다.
문제 설명
내 풀이
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.get(c) == null || map.get(c) == 0)
return false;
if (map.get(c) - 1 == 0) {
map.remove(c);
continue;
}
map.put(c, map.get(c) - 1);
}
return map.size() == 0;
}
}
나는 각 문자열이 몇 개가 있는지 파악한 후, 결과 문자열인 t를 기준으로 맵에서 문자를 하나씩 제거했다.
문자열 t에는 있는 알파벳이지만 Map에 없다면 만들 수 없으므로 바로 false를 리턴하고,
Map에 저장된 값이 0이라면 해당 문자열은 다 나왔다는 의미이므로 remove 해주고,
t의 길이만큼 반복문이 순회한 다음, Map에 Size가 0보다 크다면 문자열 s에는 있는 알파벳이지만 t에는 없다는 의미이므로
false를 리턴한다.
다른 풀이
class Solution {
public boolean isAnagram(String s, String t) {
char[] sArray = s.toCharArray();
char[] tArray = t.toCharArray();
Arrays.sort(sArray);
Arrays.sort(tArray);
return Arrays.toString(sArray).equals(Arrays.toString(tArray));
}
}
다른 방법은 뭐가 있을까 생각해 보다가 s를 재배치해서 t를 만들 수 있다면
정렬하면 똑같은 원소들을 가진 배열 2개가 생성된다고 생각했고,
char원소 배열 두가지를 다 정렬 후, toString을 했을 때, 같은 원소를 가지는지 판별해 봤다.
728x90
728x90
'알고리즘' 카테고리의 다른 글
프로그래머스,java]Level2 기능개발 (0) | 2022.02.19 |
---|---|
프로그래머스] 로또의 최고 순위와 최저 순위 (0) | 2022.02.18 |
프로그래머스]두 개 뽑아서 더하기 (0) | 2022.01.31 |
알고리즘] 1부터 n까지의 소수 갯수 찾기 및 출력 (0) | 2021.11.29 |
문자열 압축 [java] (0) | 2021.10.24 |
댓글