참고
문제해설
문제 로직고민
NOTE
•
이전 문제하고 똑같은 방식으로 Map으로 해당 문자열을 순회하면서 알파벳의 개수를 저장한다.
◦
2개의 Map으로 각 문자열의 알파벳당 개수를 지정하고, 모두 동일한지 확인
◦
2개의 Map 크기가 다르면, false 반환
◦
2개의 Map 에서 다른 값이 나온다면 fasle 반환
◦
위의 조건을 모두 만족하면 true 반환
작성코드
NOTE
class Solution {
public boolean isAnagram(String s, String t) {
HashMap<Character, Integer> sMap = new HashMap();
HashMap<Character, Integer> tMap = new HashMap();
for(char c : s.toCharArray()){
if(!sMap.containsKey(c)) sMap.put(c, 1);
else sMap.put(c, sMap.get(c) + 1);
}
for(char c : t.toCharArray()){
if(!tMap.containsKey(c)) tMap.put(c, 1);
else tMap.put(c, tMap.get(c) + 1);
}
if(sMap.size() != tMap.size()) return false;
for(Map.Entry<Character, Integer> entry : tMap.entrySet()){
char key = entry.getKey();
int value = entry.getValue();
if(!sMap.containsKey(key) || sMap.get(key) != value) return false;
}
return true;
}
}
Java
복사
정답코드
NOTE
class Solution {
public boolean isAnagram(String s, String t) {
if(s.length()!=t.length()){
return false;
}
int []arr=new int[26];
for(int i=0;i<s.length();i++){
arr[s.charAt(i)-'a']++;
arr[t.charAt(i)-'a']--;
}
for(int i=0;i<arr.length;i++){
if( arr[i]!=0){
return false;
}
}
return true;
}
}
Java
복사
메모리를 가장 적게 사용하는 코드
•
상위 결과코드가 추가조건인 유니코드를 고려하지 않은 경우가 많아서 제대로 참고하기 어려운것 같다.
class Solution {
public boolean isAnagram(String s, String t) {
char[] arr1 = s.toCharArray();
char[] arr2 = t.toCharArray();
Arrays.sort(arr1);
Arrays.sort(arr2);
return Arrays.equals(arr1,arr2);
}
}
Java
복사
시간을 빠르게 가져가는 코드
제출 코드(15ms)에 비해 3ms밖에 걸리지 않음
•
내가 작성한 코드는 3n(O(N))의 시간복잡도를 예상하는데, 위의 코드도 2 * (n log n) + n(O(N log N)으로 크게 차이나지 않을거라 생각했는데 차이가 나는 이유를 잘모르겠다.