From 653f199f0f00e9c3c06169f15d992bdd0fa67d95 Mon Sep 17 00:00:00 2001 From: casentino Date: Mon, 24 Nov 2025 15:39:16 +0900 Subject: [PATCH 1/5] Valid Palindrome --- valid-palindrome/casentino.ts | 38 +++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 valid-palindrome/casentino.ts diff --git a/valid-palindrome/casentino.ts b/valid-palindrome/casentino.ts new file mode 100644 index 0000000000..e90ee7e637 --- /dev/null +++ b/valid-palindrome/casentino.ts @@ -0,0 +1,38 @@ +function isPalindrome(s: string): boolean { + let start = 0; + let last = s.length - 1; + while (start < last) { + while (start < last && !isAlphanumeric(s.charAt(start))) { + start += 1; + } + while (start < last && !isAlphanumeric(s.charAt(last))) { + last -= 1; + } + if (s.charAt(start).toLowerCase() !== s.charAt(last).toLowerCase()) { + return false; + } + start += 1; + last -= 1; + } + return true; +} + +function isAlphanumeric(character: string) { + const characterCode = character.charCodeAt(0); + const lowerStart = "a".charCodeAt(0); + const lowerEnd = "z".charCodeAt(0); + const upperStart = "A".charCodeAt(0); + const upperEnd = "Z".charCodeAt(0); + const numericStart = "0".charCodeAt(0); + const numericEnd = "9".charCodeAt(0); + if (upperStart <= characterCode && upperEnd >= characterCode) { + return true; + } + if (lowerStart <= characterCode && lowerEnd >= characterCode) { + return true; + } + if (numericStart <= characterCode && numericEnd >= characterCode) { + return true; + } + return false; +} From 4f003403b3bfa59694cb730be4561fdfd1bae5c0 Mon Sep 17 00:00:00 2001 From: casentino Date: Mon, 24 Nov 2025 15:59:24 +0900 Subject: [PATCH 2/5] Number of 1 Bits --- number-of-1-bits/casentino.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 number-of-1-bits/casentino.ts diff --git a/number-of-1-bits/casentino.ts b/number-of-1-bits/casentino.ts new file mode 100644 index 0000000000..f0166785cc --- /dev/null +++ b/number-of-1-bits/casentino.ts @@ -0,0 +1,16 @@ +function hammingWeight(n: number): number { + let num = n; + let output = 0; + while (num !== 1) { + if (num % 2 === 1) { + output += 1; + num = (num - 1) / 2; + } else { + num = num / 2; + } + } + if (num === 1) { + output += 1; + } + return output; +} From 3ad73ad340484ef53d5da5d2ecffd936787e7724 Mon Sep 17 00:00:00 2001 From: casentino Date: Sun, 30 Nov 2025 19:50:49 +0900 Subject: [PATCH 3/5] Combination Sum --- combination-sum/casentino.ts | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 combination-sum/casentino.ts diff --git a/combination-sum/casentino.ts b/combination-sum/casentino.ts new file mode 100644 index 0000000000..8a85e4098e --- /dev/null +++ b/combination-sum/casentino.ts @@ -0,0 +1,20 @@ +function combinationSum(candidates: number[], target: number): number[][] { + const results: number[][] = []; + + function comb(index: number, arr: number[], sum: number) { + if (sum === target) { + results.push([...arr]); + return; + } + if (sum > target || candidates.length <= index) { + return; + } + arr.push(candidates[index]); + comb(index, arr, sum + candidates[index]); + arr.pop(); + comb(index + 1, arr, sum); + } + + comb(0, [], 0); + return results; +} From bd42bfb756d370bc0da11af8582e78016995506f Mon Sep 17 00:00:00 2001 From: casentino Date: Sun, 30 Nov 2025 23:38:47 +0900 Subject: [PATCH 4/5] Decode Ways --- decode-ways/casentino.ts | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 decode-ways/casentino.ts diff --git a/decode-ways/casentino.ts b/decode-ways/casentino.ts new file mode 100644 index 0000000000..33b08d90e9 --- /dev/null +++ b/decode-ways/casentino.ts @@ -0,0 +1,21 @@ +function numDecodings(s: string): number { + if (s.length === 1 && s[0] !== "0") { + return 1; + } + if (s[0] === "0") { + return 0; + } + const dp = new Array(s.length + 1).fill(0); + dp[0] = 1; + dp[1] = 1; + for (let i = 2; i <= s.length; i++) { + if (s[i - 1] !== "0") { + dp[i] += dp[i - 1]; + } + const doubleNum = parseInt(s[i - 2] + s[i - 1]); + if (doubleNum >= 10 && doubleNum <= 26) { + dp[i] += dp[i - 2]; + } + } + return dp[s.length]; +} From 2359fd83317fd13c692451769e252fd1eda72dcc Mon Sep 17 00:00:00 2001 From: casentino Date: Mon, 1 Dec 2025 20:45:25 +0900 Subject: [PATCH 5/5] Maximum Subarray --- maximum-subarray/casentino.ts | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 maximum-subarray/casentino.ts diff --git a/maximum-subarray/casentino.ts b/maximum-subarray/casentino.ts new file mode 100644 index 0000000000..31cc35dd4d --- /dev/null +++ b/maximum-subarray/casentino.ts @@ -0,0 +1,30 @@ +function maxSubArray(nums: number[]): number { + function subSums(arr: number[], left: number, right: number) { + if (left === right) { + return nums[left]; + } + const middle = Math.floor((left + right) / 2); + + const leftMax = subSums(arr, left, middle); + const rightMax = subSums(arr, middle + 1, right); + let leftSum = 0; + let leftMaxSum = Number.NEGATIVE_INFINITY; + for (let i = middle; i >= left; i--) { + leftSum += arr[i]; + if (leftMaxSum < leftSum) { + leftMaxSum = leftSum; + } + } + let rightSum = 0; + let rightMaxSum = Number.NEGATIVE_INFINITY; + for (let i = middle + 1; i <= right; i++) { + rightSum += arr[i]; + if (rightMaxSum < rightSum) { + rightMaxSum = rightSum; + } + } + + return Math.max(leftMaxSum + rightMaxSum, leftMax, rightMax); + } + return subSums(nums, 0, nums.length - 1); +}