1. 程式人生 > >無重複的最長子串

無重複的最長子串

1:題目:輸入: "abcabcbb"

                輸出: 3

                解釋: 因為無重複字元的最長子串是 "abc",所以其長度為 3。

        //窮舉出所有的字串(i,j兩次迴圈)[I,j]就可以表示所有子串的情況

思路:判斷是否唯一,跳出迴圈

//掏出迴圈思考了好久,abcbe  為何b包含在abc中直接跳出因為be其實在b這個位置的索引已經不能使用因為他不是唯一的,而且be其實[4,5]已經在後面窮舉了所以,直接跳出迴圈判斷。

/**

 * @param {string} s

 * @return {number}

 */

var lengthOfLongestSubstring = function (s) {
    if (s == "") {
        return 0;
        //簡單判斷空字串退出
    }
    var str = "", len = 1;
    //str存放字串,len用來記錄長度
    // [i,j]表示字串開頭到結尾的字元 j-i+1表示長度
    for (var i = 0; i < s.length; i++) {
        str = s[i];
        //開頭的起始位置
        for (var j = i + 1; j < s.length; j++) {
            if (s[i] == s[j] || str.indexOf(s[j]) != -1) {
            	//s[i] == s[j] || str.indexOf(s[j]) != -1
            	//判斷後面加入的字串是否在前面的陣列中,如果是則後面都不用判斷直接跳出
            	// abcb abcbad abcb直接跳出不用判斷 abcdad原因,包含前面的都不需要判斷因為有重複 a,ab,abc,abcb,abcbd 都是一樣的
                break;
            }
            str += s[j];
            if (j - i + 1 > len) {
                len = j - i + 1;
            }
        }
    }
    return len;
};