02窗口使用

2018-11-04  本文已影响0人  AoeKeller

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

示例 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;
    };
上一篇下一篇

猜你喜欢

热点阅读