[LeetCode] 1790. Check if One String Swap Can Make Strings Equal

Chobby·5일 전
1

LeetCode

목록 보기
604/650

😎풀이

  1. s1, s2 길이가 같으므로 동시 순회
    1-1. 두 요소가 다를 경우 기록
    1-2. 각 요소의 빈도 수 기록
  2. 두 요소가 모두 같았다면 true 반환
  3. 두 요소의 각 요소 빈도가 다르다면 false 반환
  4. 모든 요소의 빈도가 같고, 두 자리의 위치만 달랐다면 true 반환
  5. 두 요소 위치를 한 번만 교환 가능하므로 그 이상 위치가 다르다면 모두 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
};
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글