美文网首页
2021-03-30

2021-03-30

作者: 转移到CSDN名字丹丹的小跟班 | 来源:发表于2021-04-02 17:28 被阅读0次

    js

    1. 以下哪些值为0

    A. (() => {}).length
    b. +[]
    A. 1 & 2
    A. [1,2,-3].reduce((a,b) => {a - b}, 0)

    答案:ABCD
    原理:
    A:函数的长度就是形参的长度,该箭头函数没有形参,所以长度为0
    B:

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

    输入: s = "abcabcbb"
    输出: 3
    解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

    自己写了一个方法,思路是将字符串变成数组并且将他切割成所有有可能拼接的格式,例如[1,2,3]切割为[1],[2],[3],[1,2],[2,3]。然后将里面有重复元素的去掉就只剩下符合要求的,最后返回其中长度最大的长度即可。(遗憾的是该方法虽然可行,但是时间,内存消耗颇大,力扣上不能通过)

    var lengthOfLongestSubstring = function(s) {
        if(s.length === 0) {
            return 0
        }
        let arr = []
        let num = 1
        for(let i = 0; i < s.length; i++) {
            let ary = s.split("")
            for(let j = 0; j < s.length; j ++) {
                let data = ary.slice().slice(j, num)
                if(data.length === [... new Set(data)].length) {
                    arr.push(data)
                }
            }
            num ++
        }
        let len = 0
        arr.forEach(item => {
            if(item.length > len) {
                len = item.length
            }
        })
        return len
    };
    

    在献上一篇力扣的答案,简单明了

    var lengthOfLongestSubstring = function(s) {
      // 滑动窗口初始化为一个空数组
      let arr = [];
      // 要返回的字符串的长度
      let max = 0;
      for (let i = 0; i < s.length; i++) {
        // 使用 indexOf 判断是否在数组中出现过
        let index = arr.indexOf(s[i])
        // 如果出现过
        if (index !== -1) {
          // 从数组开头到当前字符串全部截取掉
          arr.splice(0, index + 1);
        }
        // 在窗口右边放进新的字符
        arr.push(s.charAt(i));
        // 更新下最大值
        max = Math.max(arr.length, max);
      }
      // 返回
      return max;
    };
    

    相关文章

      网友评论

          本文标题:2021-03-30

          本文链接:https://www.haomeiwen.com/subject/xcmwhltx.html