๐Ÿ”’Algorithm

LeetCode [JS] > 859. Buddy strings

devWarrior 2025. 4. 5. 21:30

๐Ÿ“Œ๋ฌธ์ œ๋งํฌ

https://leetcode.com/problems/buddy-strings/

๐Ÿ”จ๋ฌธ์ œํ’€์ด

์ด ๋ฌธ์ œ๋Š” s, goal ์ด ์„œ๋กœ ์™„์ „ํžˆ ๋™์ผํ•œ ๋ฌธ์ž์ผ ๋•Œ, ๋ฌธ์ž์—ด ๊ธธ์ด๊ฐ€ ๋‹ค๋ฅผ๋•Œ, ๋ฌธ์ž์ค‘์— 2๊ฐœ๋งŒ ๋‹ค๋ฅผ๋•Œ๋ฅผ ๋ถ„๊ธฐ์ฒ˜๋ฆฌํ•˜์—ฌ ํ’€๋ฉด ๋œ๋‹ค. ๊ฒฐ๊ตญ ๊ฒฝ์šฐ๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์กฐ๊ธˆ๋งŒ ์ƒ๊ฐํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋‹ค. ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(n)์ด๋‹ค. 

์™„์ „ํžˆ ๋™์ผํ•œ ๋ฌธ์ž์—ด์ผ ๋•Œ๋Š” s ๋ฌธ์ž์ค‘ ์ค‘๋ณต๋˜๋Š” ๋ฌธ์ž๊ฐ€ ์žˆ์œผ๋ฉด ํ•ด๋‹น ๋ฌธ์ž๋ผ๋ฆฌ ์ˆœ์„œ๋ฅผ ๋ฐ”๊ฟ”๋„ ๋™์ผํ•œ ๋ฌธ์ž์—ด์ด ๋˜๋Š”๋ฐ ์ด๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜๋Š” Set() ๊ฐ์ฒด๋ฅผ ์ป๋‹ค. Set ๊ฐ์ฒด๋Š” ์–ผํ•๋ณด๋ฉด ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(n^2) ์ฒ˜๋Ÿผ ๋ณด์ผ ์ˆ˜ ์žˆ๋Š”๋ฐ Set๊ฐ์ฒด๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ Hash Table์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์ œ๋ก  O(n) ์ด๋‹ค. 

/**
 * @param {string} s
 * @param {string} goal
 * @return {boolean}
 */
var buddyStrings = function (s, goal) {
    if (s.length !== goal.length) {
        return false;
    }

    if(s===goal){
        return new Set([...s]).size === s.length ? false : true           
    }
    
    let diffIdxArr = [];
    for (let i = 0; i < s.length; ++i) {
        if (s[i] !== goal[i]) {
            diffIdxArr.push(i);
        }
    }

    if (diffIdxArr.length === 2){
        const [i,j] = diffIdxArr 
        return s[i] === goal[j] && s[j] === goal[i]
    } 

    return false;
};