leetcode系列3. 無重複字符的最長子串

3. 無重複字符的最長子串

題目描述:給定一個字符串,請你找出其中不含有重複字符的 最長子串 的長度。

example:

輸入: “abcabcbb”
輸出: 3
解釋: 因爲無重複字符的最長子串是 “abc”,所以其長度爲 3。

題目主要考察點是判斷是否重複,並且在無重複的範圍內找到最長的子串

var lengthOfLongestSubstring = function(s) {
    if (s.length === 0) return 0;
    let res = 0;
    let j = 0, t = 0;
    for (let i = 0; i < s.length; i++) {
        t = s.slice(j, i).indexOf(s[i]);
        if (t === -1) {
            // 不存在
            res = Math.max(res, i - j + 1);
        } else {
            // 存在
            j = j + t + 1;
        }
    }
    return res || 1;
}

1、判斷s的長度是否爲0, 如果爲0那麼直接返回不需要進行處理

2、記錄變量,res最長子串長度,j下一次的起點,t存在的下標

3、循環字符串從0開始並進行截取從j開始到i的串長進行當前字符的判斷,如果存在則返回下標,如果不存在則返回-1(可以繼續往前走)

4、當爲-1時也要更新當前的最大值,因爲下標比長度小1,所以要加1

5、當存在的時候那麼需要找到第一個重複的下標,並從這個下標繼續截取字符串進行下一次的判斷即可。

在這裏插入圖片描述

題目鏈接:無重複字符的最長子串

大家繼續加油啊!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章