LeetCode 3 無重複字元的最長子串

2021-09-17 18:59:26 字數 2374 閱讀 9557

題目描述

給定乙個字串,請你找出其中不含有重複字元的最長子串的長度。

示例 :

輸入:

"abcabcbb"

輸出:3

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

解題思路:

根據給出的示例,首先將字串通過tochararray()轉化為字元陣列,然後遍歷陣列元素並將其插入的list集合中,同時判斷集合中是否已經存在該字元。如果存在,則計算插入元素前的集合長度,然後將集合清空,將當前字元插入空白集合中,否則繼續插入新的陣列元素。最終最長的集合長度即為最長子串的長度。**如下:

private

static

intlengthoflongestsubstring

(string s)

else

// 如果集合中只存在乙個元素或者重複元素,則不會進入else語句,所以此處需要新增乙個判斷

length =

(length >= substring.

size()

)? length : substring.

size()

;// 每次迴圈完成後,將得到的子字串長度和之前的maxlength作比較,如果大於則替換maxlength,反之則保持不變

maxlength =

(length >= maxlength)

? length : maxlength;

}// 返回最大子字串長度

return maxlength;

}

執行以上**,能通過測試用例,但提交**卻出現bug。經檢查,發現**中的substring.clear()有問題,這裡不應該將substring清空,如字串abcdbfg,如果採用上面的**,當讀取到第二個b時,呼叫clear()就會將集合中的abcd給刪掉,最後的結果就是bfg,而正確的結果是cdbfg。正確的方式是在插入b之前,將最後乙個b之前的元素給刪掉。**如下:

private

static

intlengthoflongestsubstring

(string s)

else

length = length >= substring.

size()

? length : substring.

size()

; maxlength =

(length >= maxlength)

? length : maxlength;

}return maxlength;

}

以上**經測試,能通過abcdbfg示例,但是提交後仍然出錯,987個測試用例通過了986個,最後乙個提示超出時間限制。測試上述**,發現時間主要花在以下兩行**上。

// 使用這行**比substring.clear()平均多花10ms左右

int index = substring.

lastindexof

(c)+1;

// 而該行**直接將執行時間從60ms拉長至200+,最終導致時間超長

substring = substring.

sublist

(index, length)

;

經考慮,上面的**是將重複字元前面的元素從substring中刪除從而取子集合,可以換一種思路,不用刪除元素,而是將最後一次出現的重複元素的下標記錄下來,然後和集合的length相減,同樣相當於得到子集合的長度。具體**如下:

private

static

intlengthoflongestsubstring

(string s)

else

// 相當於計算子集合的長度

length = substring.

size()

- index;

maxlength = length >= maxlength ? length: maxlength;

}return maxlength;

}

提交**,可通過所有的測試用例,時間也控制在30ms左右,後續在思考更優的實現方法。

leetcode 3 無重複的字串

給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 輸入 pwwkew 輸出 3 ...

leetcode 3 無重複字元的最長字元子串

堅持打卡!題目 給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 輸入 pwwk...

leetcode 3 最長無重複字串

3.longest substring without repeating characters 題面 given a string,find the length of the longest substring without repeating characters.給定字串,找到最長無重複字...