문제
https://leetcode.com/problems/valid-anagram/description/?envType=study-plan-v2&envId=top-interview-150
해결 방법
- 이전에 풀었던 Ransom Note와 거의 유사한 문제
- Ransom Note와는 달리 s와 t에서 나온 알파벳의 횟수가 정확히 일치해야 함
- 해결 방법은 먼저 s와 t의 길이가 같은지 체크한 후, s에 각각의 알파벳이 몇번씩 나오는지 체크해주고, t에서 특정 알파벳이 s에 나온 횟수보다 크다면 false return
- 특정 알파벳이 t에서 나온 횟수가 s에서 나온 횟수보다 작은지는 따로 체크하지 않아도 되는 이유는 둘의 길이가 같은지 먼저 체크를 해줬기 때문에, 특정 알파벳이 t보다 s에서 적게 나왔다면, 다른 알파벳이 s에서 더 많이 나왔을 것이기 때문
코드
class Solution {
public boolean isAnagram(String s, String t) {
if (s.length() != t.length()) {
return false;
}
int[] alphabet = new int[26];
for (int i = 0 ; i < s.length() ; i ++) {
char c = s.charAt(i);
alphabet[c - 'a'] ++;
}
for (int i = 0 ; i < t.length() ; i ++) {
char c = t.charAt(i);
alphabet[c - 'a'] --;
if (alphabet[c - 'a'] < 0) {
return false;
}
}
return true;
}
}
결과
