😎풀이

  1. 문자열 길이가 다르면 같아질 수 없음
  2. 동일 문자라면 다음 규칙을 따름
    2-1. 중복 되는 문자가 있는 경우, 그 문자를 swap 하면 되므로 가능
    2-2. 없는 경우 어딜 바꿔도 달라지므로 불가능
  3. 다른 문자라면 다음 규칙을 따름
    3-1. 문자열에서 다른 부분을 찾아냄
    3-2. 다른 부분이 두 곳 이상이라면, 즉 한 번의 swap으로 맞출 수 없다면 불가능
    3-3. 다른 부분을 swap한 결과가 다르다면 불가능
  4. 모든 조건에서 불가능하지 않다면 가능
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
};
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글