
😎풀이
s1
, s2
길이가 같으므로 동시 순회
1-1. 두 요소가 다를 경우 기록
1-2. 각 요소의 빈도 수 기록
- 두 요소가 모두 같았다면
true
반환
- 두 요소의 각 요소 빈도가 다르다면
false
반환
- 모든 요소의 빈도가 같고, 두 자리의 위치만 달랐다면
true
반환
- 두 요소 위치를 한 번만 교환 가능하므로 그 이상 위치가 다르다면 모두
false
반환환
function areAlmostEqual(s1: string, s2: string): boolean {
let missed = 0
const s1Freq = new Map()
const s2Freq = new Map()
for(let i = 0; i < s1.length; i++) {
const curS1 = s1[i]
const curS2 = s2[i]
if(curS1 !== curS2) missed++
s1Freq.set(curS1, (s1Freq.get(curS1) ?? 0) + 1)
s2Freq.set(curS2, (s2Freq.get(curS2) ?? 0) + 1)
}
if(missed === 0) return true
for(const [key, value] of s1Freq) {
if(s2Freq.get(key) !== value) return false
}
return missed === 2
};