
[문제]
Given two strings s and t, return true if t is an anagram of s, and false otherwise.
An Anagram is a word or phrase formed by rearranging the letters of a different word or phrase, typically using all the original letters exactly once.
https://leetcode.com/problems/valid-anagram/?envType=study-plan-v2&envId=top-interview-150
class Solution {
public boolean isAnagram(String s, String t) {
HashMap<Character, Integer> map = new HashMap<>();
char[] sC = s.toCharArray();
char[] tC = t.toCharArray();
int cnt = 0;
for (int i = 0; i < tC.length; i++) {
if (map.get(tC[i]) == null) {
map.put(tC[i], 1);
} else {
map.put(tC[i], map.get(tC[i]) + 1);
}
}
for (int i = 0; i < sC.length; i++) {
if (map.get(sC[i]) == null || map.get(sC[i]) <= 0) {
return false;
}
if (map.get(sC[i]) > 0) {
cnt += 1;
map.put(sC[i], map.get(sC[i]) - 1);
}
}
if (cnt == tC.length) {
return true;
} else {
return false;
}
}
}
// 주어진 문자열 t가 s의 애나그램이면 return true, 아니면 return false
// 정보) 애나그램이란 해당 문자열을 재배열하여 같은 문자열로 만들 수 있는지를 의미한다.
// HashMap을 사용하여 해결해보자.
// 1. t를 문자형 배열로 변환시켜 요소들을 key값으로 map에 저장한다. (없으면 1, 있으면 += 1)
// 2. s를 문자형 배열로 변환시켜 요소들을 key값으로 두어 map에서 찾는다.
// 2-1. 만약 value값이 1 이상인 경우 cnt += 1, value -= 1
// 2-2. 만약 value값이 0 이하이거나 key값이 null이라면 return false;
// 3. s의 문자열이 t로 재배열 될 수 있다면 (cnt값이 t의 길이와 같다면) return true, 아니면 return false