Leetcode Longest Substring Without Repeating Characters & 無重複字元的最長子串 解題報告
阿新 • • 發佈:2021-08-20
-
問題描述
- 給定一個字串
s
,請你找出其中不含有重複字元的 最長子串 的長度。
- 給定一個字串
-
測試用例
示例1
- 輸入: s = "abcabcbb"
- 輸出: 3
- 解釋: 因為無重複字元的最長子串是 "abc",所以其長度為 3。
示例2
- 輸入: s = "bbbbb"
- 輸出: 1
- 解釋: 因為無重複字元的最長子串是 "b",所以其長度為 1。
示例 3:
- 輸入: s = "pwwkew"
- 輸出: 3
- 解釋: 因為無重複字元的最長子串是 "wke",所以其長度為 3。
- 請注意,你的答案必須是 子串 的長度,"pwke" 是一個子序列,不是子串。
示例 4:
- 輸入: s = ""
- 輸出: 0
示例5
- 輸入:s=“ ”
- 輸出:1
示例6
- 輸入:s=“ ”
- 輸出:1
-
補充說明
-
0 <= s.length <= 5 * 104
-
s
由英文字母、數字、符號和空格組成
-
-
解題報告
主要思路是使用滑動視窗,分別使用start、end 指標,前提是保證兩個指標單調遞增,剩餘邏輯就是處理指標移動的邏輯。
java程式碼如下:
public int lengthOfLongestSubstring(String s) { int start = 0; int end = 0; int res = 0; //記錄出現的位置 int[] array = new int[128]; while (end < s.length()) { int index = s.charAt(end); //移動start指標 start = Math.max(start, array[index]); //移動end指標 end += 1; //計算最大視窗 res = Math.max(res, end - start); //記錄出現字元位置,重置start指標準備 array[index] = end; } return res; }