算法題--尋找最長子串

問題:

有一個長度隨機的字符串,尋找它的最長子串。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;
};
複製代碼
相關文章
相關標籤/搜索