
두 개의 문자열 s와 t가 주어지면, t가 s의 애너그램이면 true를 반환하고 그렇지 않으면 false를 반환합니다.
애너그램은 일반적으로 모든 원래 문자를 정확히 한 번 사용하여 다른 단어나 구문의 문자를 재배열하여 형성된 단어나 구문입니다.

s와 t에서 대칭되는 똑같은 무자를 찾아야하는데 이중 반복문으로 완전탐색하여 결과값을 찾기에는 비효율적이라 생각하여 HashMqp 을 사용하여 문제를 해결하였습니다.s의 문자열에서 가각의 문자를 HashMap의 Key값으로 저장하며 value는 해당 문자의 빈출 수를 저장하였습니다.t의 각각의 문자를 반복문으로 조회하여 저장된 HashMap에서 Key값과 비교하고 value를 체크합니다. t의 문자가 있고 해당 Key의 Value가 0 이상이면 Value-1을 하여 데이터를 수정합니다.false를 반환합니다.s와 t의 문자열 길이를 확인하여 조건처리를 해줍니다.class Solution {
public boolean isAnagram(String s, String t) {
Map<Character, Integer> map = new HashMap<Character, Integer>();
for(int i = 0; i < s.length(); i++){
char c = s.charAt(i);
map.put(c, map.getOrDefault(c, 0) + 1);
}
for(int i = 0; i < t.length(); i++){
if( map.containsKey(t.charAt(i))){
if (map.get(t.charAt(i)) > 0)
map.put(t.charAt(i), map.get(t.charAt(i)) - 1);
else
return false;
}
else
return false;
}
return s.length() == t.length() ? true : false;
}
}
이중 if문으로 조전처리를 하여 else문에서 이중으로 똑같이
return false;을 반환하는 중복된 코드가 있어 수정하였습니다.
class Solution {
public boolean isAnagram(String s, String t) {
Map<Character, Integer> map = new HashMap<Character, Integer>();
for(int i = 0; i < s.length(); i++)
map.put(s.charAt(i), map.getOrDefault(s.charAt(i), 0) + 1);
for(int i = 0; i < t.length(); i++){
if( map.containsKey(t.charAt(i)) && map.get(t.charAt(i) ) > 0)
map.put(t.charAt(i), map.get(t.charAt(i)) - 1);
else
return false;
}
return s.length() == t.length() ? true : false;
}
}
문자열
s와t를 문자 배열로 만들어 정렬을 하고 비교하여 간단하게 문제를 해결할 수 있습니다.
class Solution {
public boolean isAnagram(String s, String t) {
char[] sToChar = s.toCharArray();
char[] tToChar = t.toCharArray();
Arrays.sort(sToChar);
Arrays.sort(tToChar);
return Arrays.equals(sToChar, tToChar);
}
}