SYSTEM: ONLINE
VER. ...
SLEET LOG
SLEET'S LOG
/2025年3月23日/2 MIN READ

无重复字符的最长子串、合并两个有序数组、比较版本号

JavaScript leetcode

无重复字符的最长子串

给定一个字符串 s,找出其中不含有重复字符的最长子串的长度。

示例:

输入:s = "abcabcbb"

输出:3

解释:因为无重复字符的最长子串是"abc",所以其长度为 3

思路:维护一个滑动窗口;用 Set 维护这个窗口无重复字符。需要记住其三个方法:has / delete / add

ts
function lengthOfLongestSubstring(s: string): number { let left = 0, maxLen = 0; const set = new Set<string>(); for (let right = 0; right < s.length; right++) { while (set.has(s[right])) { set.delete(s[left++]); } set.add(s[right]); maxLen = Math.max(maxLen, right - left + 1); } return maxLen; }

合并两个有序数组

给定两个非递减序列 nums1nums2,另有两个整数 mn 分别表示数组的长度。

请合并 nums2nums1 中,使合并后的数组同样按照非递减顺序排列。

思路:因为本身就是在往 nums1 里放元素,所以只要判断 nums2 走完没有即可

ts
function merge(nums1: number[], m: number, nums2: number[], n: number): void { let p = n + m - 1; let i = m - 1, j = n - 1; while (i >= 0 && j >= 0) { if (nums1[i] > nums2[j]) { nums1[p--] = nums1[i--]; } else { nums1[p--] = nums2[j--]; } } while (j >= 0) { nums1[p--] = nums2[j--]; } }

比较版本号

给定两个版本号 version1version2,请比较它们。修订号的值是它转换为整数并忽略前导零。

比较版本号时,请按从左到右的顺序依次比较它们的版本号。如果其中一个版本字符串的修订号较少,则将缺失的修订号的值视为 0

返回规则如下:

  • 如果 version1 < version2,返回 -1

  • 如果 version1 > version2,返回 1

  • 除此之外返回 0

ts
function compareVersion(version1: string, version2: string): number { const v1 = version1.split("."); const v2 = version2.split("."); const len = Math.max(v1.length, v2.length); for (let i = 0; i < len; i++) { const c1 = Number(v1[i] || "0"); const c2 = Number(v2[i] || "0"); if (c1 > c2) { return 1; } if (c1 < c2) { return -1; } } return 0; }
Article Index