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;
};