
😎풀이
- 문자열 길이가 다르면 같아질 수 없음
- 동일 문자라면 다음 규칙을 따름
2-1. 중복 되는 문자가 있는 경우, 그 문자를 swap 하면 되므로 가능
2-2. 없는 경우 어딜 바꿔도 달라지므로 불가능
- 다른 문자라면 다음 규칙을 따름
3-1. 문자열에서 다른 부분을 찾아냄
3-2. 다른 부분이 두 곳 이상이라면, 즉 한 번의 swap으로 맞출 수 없다면 불가능
3-3. 다른 부분을 swap한 결과가 다르다면 불가능
- 모든 조건에서 불가능하지 않다면 가능
function buddyStrings(s: string, goal: string): boolean {
if(s.length !== goal.length) return false
if(s === goal) {
const set = new Set<string>()
for(const char of s) {
if(set.has(char)) return true
set.add(char)
}
return false
}
const diff = []
for(let i = 0; i < s.length; i++) {
if(s[i] !== goal[i]) diff.push(i)
}
if(diff.length !== 2) return false
if(s[diff[0]] !== goal[diff[1]] || s[diff[1]] !== goal[diff[0]]) return false
return true
};