有一個長度隨機的字符串,尋找它的最長子串。bash
輸入:spa
abcabcbb
複製代碼
輸出:指針
3
複製代碼
遍歷確定是要遍歷,使用兩個指針,第一個指向子串首,第二個指向子串尾,當將子串尾向前推動發現和已有子串有重複元素時,改變子串首指針指向當前這個重複元素的後面一位,子串尾的指針一直默認++。code
/** * @param {string} s * @return {number} */
var lengthOfLongestSubstring = function(s) {
var length = s.length;
if (length <= 1) {
return length;
}
var p = 0; // 首指針
var q = 1; // 尾指針
var result = 1;
while (q < length) {
var sub = s.slice(p, q); // 得到子串
var i = sub.indexOf(s[q]); // 子串尾部的下一位的index
if (i !== -1) {
p = p + i + 1; // 子串首部指針指向重複元素i的下一位
}
q++; // 尾部指針一直默認向後推動
result = q - p > result ? q - p : result; // 每一次判斷都和上一次的結果對比
}
return result;
};
複製代碼