3. 无重复字符的最长子串

1、Brute Force
// 一次遍历

  1. /**
  2. * @param {string}
  3. * @return {number}
  4. */
  5. var lengthOfLongestSubstring = function(s) {
  6. var len = s.length;
  7. var res = 0;
  8. for (let j = 0; j < len; ++j) {
  9. var charMap = {};
  10. var i = j;
  11. while(i < len && !charMap[s[i]]) {
  12. charMap[s[i++]] = true;
  13. res = Math.max(res, i - j)
  14. }
  15. }
  16. return res
  17. };

2、滑动窗口
相当维护一个窗口,求其窗口最大值,每次窗口向右移动,检测窗口是否出现过,并更新位置
有问题,’abcabcbb’没法过

  1. /**
  2. * @param {string}
  3. * @return {number}
  4. */
  5. var lengthOfLongestSubstring = function(s) {
  6. var len = s.length;
  7. var res = 0;
  8. var strMap = {};
  9. // j是右端点
  10. for (let j = 0, i = 0; j < len; j++) {
  11. var cacheItem = (strMap[s[j]] || -1)
  12. i = Math.max(i, cacheItem + 1);
  13. res = Math.max(res, j - i + 1);
  14. strMap[s[j]] = j;
  15. }
  16. return res
  17. };

415. 字符串相加

  1. /**
  2. * @param {string} num1
  3. * @param {string} num2
  4. * @return {string}
  5. */
  6. // 短的补齐,然后相加即可
  7. // 或者用栈的数据结构
  8. var addStrings = function(num1, num2) {
  9. var stack1 = num1.split('');
  10. var stack2 = num2.split('');
  11. var res = [];
  12. var flag;
  13. while(stack1.length || stack2.length) {
  14. let a = stack1.pop() || 0
  15. let b = stack2.pop() || 0
  16. let sum = parseInt(a) + parseInt(b)
  17. if (flag === true) {
  18. sum += 1
  19. flag = false;
  20. }
  21. if (sum >= 10) {
  22. flag = true
  23. sum = sum % 10
  24. }
  25. res.unshift(sum)
  26. if (!stack1.length && !stack2.length && flag) {
  27. res.unshift(1)
  28. }
  29. }
  30. return res.join('')
  31. };

88. 合并两个有序数组

如何计算时间复杂度/空间复杂度?

  1. /**
  2. * @param {number[]} nums1
  3. * @param {number} m
  4. * @param {number[]} nums2
  5. * @param {number} n
  6. * @return {void} Do not return anything, modify nums1 in-place instead.
  7. */
  8. var merge = function(nums1, m, nums2, n) {
  9. nums1.splice(m, nums1.length - m, ...nums2);
  10. return nums1.sort((a, b) => a - b);
  11. };