출처 : leetcode
난이도 : easy
[문제]
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.
[예제]
Input: s = "anagram", t = "nagaram"
Output: true
Input: s = "rat", t = "car"
Output: false
위 문제를 푸는 방법은 두가지를 생각했다.
첫번째는 s와 t를 sort 후에 두 String 비교하기.
두번째는 s를 hashmap에 넣고 t와 알파벳 갯수를 비교하기.
sort를 해주는 것이 시간이 더 걸리기때문에 두번째를 택했다.
아래 풀이의 시간복잡도는 O(N), 공간복잡도 또한 O(N)이 나온다.
class Solution {
public boolean isAnagram(String s, String t) {
if (s.length() != t.length()) {
return false;
}
Map<Character, Integer> sMap = makeMap(s);
for (char c : t.toCharArray()) {
if (!sMap.containsKey(c)) {
return false;
}
if (sMap.containsKey(c) && sMap.get(c) < 1) {
return false;
}
int count = sMap.get(c);
sMap.put(c, count-1);
}
return true;
}
private Map<Character, Integer> makeMap(String s) {
Map<Character, Integer> map = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
int count = map.getOrDefault(c, 0);
map.put(c, count + 1);
}
return map;
}
}