문제풀이의 핵심은 각 두 연산에 집착하지 말고, 논리적으로 보는 것
스왑을 무제한으로 할 수 있기 때문에 사실상 글자의 빈도수가 일치하는지만 보면 된다.
둘 다 만족하는 경우 스왑을 통해 만들어질 수 있다는 의미가 된다.
class Solution {
public boolean closeStrings(String word1, String word2) {
int[] frequancyArr1 = new int[26];
int[] frequancyArr2 = new int[26];
for (char ch : word1.toCharArray()) {
frequancyArr1[ch - 'a']++;
}
for (char ch : word2.toCharArray()) {
frequancyArr2[ch - 'a']++;
}
for (int i=0; i<26; i++) {
if ((frequancyArr1[i] == 0 && frequancyArr2[i] != 0) || (frequancyArr1[i] != 0 && frequancyArr2[i] == 0)) {
return false;
}
}
Arrays.sort(frequancyArr1);
Arrays.sort(frequancyArr2);
for (int i=0; i<26; i++) {
if (frequancyArr1[i] != frequancyArr2[i]) {
return false;
}
}
return true;
}
}