๐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;
};