diff --git a/clone-graph/lhc0506.js b/clone-graph/lhc0506.js new file mode 100644 index 000000000..2470e81a5 --- /dev/null +++ b/clone-graph/lhc0506.js @@ -0,0 +1,38 @@ +/** + * // Definition for a _Node. + * function _Node(val, neighbors) { + * this.val = val === undefined ? 0 : val; + * this.neighbors = neighbors === undefined ? [] : neighbors; + * }; + */ + +/** + * @param {_Node} node + * @return {_Node} + */ +var cloneGraph = function(node) { + if (!node) return null; + + const stack = [node]; + const map = new Map(); + + map.set(node.val, new _Node(node.val)); + + while (stack.length > 0) { + const currentNode = stack.pop(); + + for (const neighbor of currentNode.neighbors) { + if (!map.has(neighbor.val)) { + map.set(neighbor.val, new Node(neighbor.val)); + stack.push(neighbor); + } + map.get(currentNode.val).neighbors.push(map.get(neighbor.val)); + } + + } + return map.get(node.val); +}; + + +// 시간복잡도: O(n) +// 공간복잡도: O(n) diff --git a/longest-repeating-character-replacement/lhc0506.js b/longest-repeating-character-replacement/lhc0506.js new file mode 100644 index 000000000..5d1e899a1 --- /dev/null +++ b/longest-repeating-character-replacement/lhc0506.js @@ -0,0 +1,32 @@ +/** + * @param {string} s + * @param {number} k + * @return {number} + */ +var characterReplacement = function(s, k) { + let start = 0; + let maxFreq = 0; + let result = 0; + const map = new Map(); + + for (let end = 0; end < s.length; end++) { + const endChar = s[end]; + map.set(endChar, 1 + (map.get(endChar) || 0)); + + maxFreq = Math.max(maxFreq, map.get(endChar)); + + if (end - start + 1 - maxFreq > k) { + const startChar = s[start]; + map.set(startChar, map.get(startChar) - 1); + start++; + + } + + result = Math.max(result, end - start + 1); + } + + return result; +}; + +// 시간복잡도: O(n) +// 공간복잡도: O(1) diff --git a/palindromic-substrings/lhc0506.js b/palindromic-substrings/lhc0506.js new file mode 100644 index 000000000..c6fc56441 --- /dev/null +++ b/palindromic-substrings/lhc0506.js @@ -0,0 +1,30 @@ +/** + * @param {string} s + * @return {number} + */ + +var countSubstrings = function(s) { + let count = 0; + for (let i = 0; i < s.length; i++) { + let start = i; + let end = i; + while (start >= 0 && end < s.length && s[start] === s[end]) { + count += 1; + start -= 1; + end += 1; + } + + start = i; + end = i + 1; + while (start >= 0 && end < s.length && s[start] === s[end]) { + count += 1; + start -= 1; + end += 1; + } + } + + return count; +}; + +// 시간 복잡도: O(n^2) +// 공간 복잡도: O(1) diff --git a/reverse-bits/lhc0506.js b/reverse-bits/lhc0506.js new file mode 100644 index 000000000..ca9e5c793 --- /dev/null +++ b/reverse-bits/lhc0506.js @@ -0,0 +1,10 @@ +/** + * @param {number} n - a positive integer + * @return {number} - a positive integer + */ +var reverseBits = function(n) { + return parseInt(n.toString(2).padStart(32, '0').split('').reverse().join(''), 2); +}; + +// 시간복잡도: O(n) +// 공간복잡도: O(1)