美文网首页
02窗口使用

02窗口使用

作者: AoeKeller | 来源:发表于2018-11-04 22:35 被阅读0次

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

    示例 1:

    输入: "abcabcbb"
    输出: 3
    解释: 无重复字符的最长子串是 "abc",其长度为 3。
    示例 2:

    输入: "bbbbb"
    输出: 1
    解释: 无重复字符的最长子串是 "b",其长度为 1。
    示例 3:

    输入: "pwwkew"
    输出: 3
    解释: 无重复字符的最长子串是 "wke",其长度为 3。
    请注意,答案必须是一个子串,"pwke" 是一个子序列 而不是子串。

    利用滑动窗口来解决:
    详解链接

    
        /**
         * @param {string} s
         * @return {number}
         */
        var lengthOfLongestSubstring = function (s) {
          var len = s.length;
          var num = 0;
          var i = 0, j = 0, arr = [];
          while (i < len && j < len) {
            if (arr.indexOf(s[j]) === -1) {
              arr.push(s[j]);
              j++;
              num = Math.max(num, j - i)
            } else {
              arr = arr.slice(1);
              i++;
            }
          }
          return num;
        };
    
    

    优化后的窗口:

        var lengthOfLongestSubstring = function(s) {
          var len = s.length;
          var num = 0;
          var i=0,j=0,arr=[];
          for(;j<len;j++){
            if(arr.indexOf(s[j])!==-1){
              i = arr.lastIndexOf(s[j])+1;
              arr.splice(0,i);
            }
            num = Math.max(num,arr.length+1);
            arr.push(s[j]);
          }
          return num;
        };
    

    相关文章

      网友评论

          本文标题:02窗口使用

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