3. 无重复字符的最长子串
1、Brute Force
// 一次遍历
/*** @param {string}* @return {number}*/var lengthOfLongestSubstring = function(s) {var len = s.length;var res = 0;for (let j = 0; j < len; ++j) {var charMap = {};var i = j;while(i < len && !charMap[s[i]]) {charMap[s[i++]] = true;res = Math.max(res, i - j)}}return res};
2、滑动窗口
相当维护一个窗口,求其窗口最大值,每次窗口向右移动,检测窗口是否出现过,并更新位置
有问题,’abcabcbb’没法过
/*** @param {string}* @return {number}*/var lengthOfLongestSubstring = function(s) {var len = s.length;var res = 0;var strMap = {};// j是右端点for (let j = 0, i = 0; j < len; j++) {var cacheItem = (strMap[s[j]] || -1)i = Math.max(i, cacheItem + 1);res = Math.max(res, j - i + 1);strMap[s[j]] = j;}return res};
415. 字符串相加
/*** @param {string} num1* @param {string} num2* @return {string}*/// 短的补齐,然后相加即可// 或者用栈的数据结构var addStrings = function(num1, num2) {var stack1 = num1.split('');var stack2 = num2.split('');var res = [];var flag;while(stack1.length || stack2.length) {let a = stack1.pop() || 0let b = stack2.pop() || 0let sum = parseInt(a) + parseInt(b)if (flag === true) {sum += 1flag = false;}if (sum >= 10) {flag = truesum = sum % 10}res.unshift(sum)if (!stack1.length && !stack2.length && flag) {res.unshift(1)}}return res.join('')};
88. 合并两个有序数组
如何计算时间复杂度/空间复杂度?
/*** @param {number[]} nums1* @param {number} m* @param {number[]} nums2* @param {number} n* @return {void} Do not return anything, modify nums1 in-place instead.*/var merge = function(nums1, m, nums2, n) {nums1.splice(m, nums1.length - m, ...nums2);return nums1.sort((a, b) => a - b);};
