"abcabcbb" => 3 //無重複字符的最長子串是 "abc",長度爲 3。javascript
"abcabcbb" => 1 //無重複字符的最長子串是 "b",長度爲 1。java
"pwwkew" => 3 //無重複字符的最長子串是 "wke",長度爲 3。數組
轉換字符串爲字符數組Cspa
建立空數組A用於存放從數組C中截取的非重複字符串code
建立變量L用於存儲較長字符串長度。 cdn
若是存在 爲保障數組A不包含數組C中截取的非重複字符串,須要截取重複字符以後的全部字符串從新賦值數組A,並將當前遍歷字符壓入,此操做壓入一個字符刪除至少一個字符因此操做後數組A的長度將小於等於上一次操做後數組A的長度,故L將維持上一次操做後數組A的長度不變。blog
若是不存在 則代表數組A中不存在當前遍歷字符,可將當前字符壓入,此操做看似數組A的長度將大於變量L,但存在上次遍歷字符爲重複字符,則變量L爲上上次操做後數組A的長度,因此須要比較當前數組A長度和變量L大小,將較大者賦值給變量L,ip
通過上訴操做後變量L將保存字符數組C中的最長非重複字符串長度字符串
/** * @param {string} s * @return {number} */
var lengthOfLongestSubstring = function(s) {
const strs = s.split(""), LongestArr = [];
let LALength = 0;
strs.map(str => {
let LAIndex = LongestArr.indexOf(str);
if (LAIndex < 0) {
LongestArr.push(str);
LALength = LongestArr.length > LALength ? LongestArr.length : LALength;
} else {
LongestArr.splice(0, LAIndex + 1);
LongestArr.push(str);
}
return 0;
});
return LALength
};
複製代碼