02窗口使用

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

示例 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;
    };
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。