-
問(wèn)題描述
- 給定一個(gè)字符串
s
窃蹋,請(qǐng)你找出其中不含有重復(fù)字符的 最長(zhǎng)子串 的長(zhǎng)度。
- 給定一個(gè)字符串
-
測(cè)試用例
示例1
- 輸入: s = "abcabcbb"
- 輸出: 3
- 解釋: 因?yàn)闊o(wú)重復(fù)字符的最長(zhǎng)子串是 "abc",所以其長(zhǎng)度為 3。
示例2
- 輸入: s = "bbbbb"
- 輸出: 1
- 解釋: 因?yàn)闊o(wú)重復(fù)字符的最長(zhǎng)子串是 "b",所以其長(zhǎng)度為 1纬黎。
示例 3:
- 輸入: s = "pwwkew"
- 輸出: 3
- 解釋: 因?yàn)闊o(wú)重復(fù)字符的最長(zhǎng)子串是 "wke",所以其長(zhǎng)度為 3劫窒。
- 請(qǐng)注意本今,你的答案必須是 子串 的長(zhǎng)度,"pwke" 是一個(gè)子序列,不是子串诈泼。
示例 4:
- 輸入: s = ""
- 輸出: 0
示例5
- 輸入:s=“ ”
- 輸出:1
示例6
- 輸入:s=“ ”
- 輸出:1
-
補(bǔ)充說(shuō)明
- 0 <= s.length <= 5 * 104
-
s
由英文字母、數(shù)字煤禽、符號(hào)和空格組成
-
解題報(bào)告
主要思路是使用滑動(dòng)窗口铐达,分別使用start、end 指針檬果,前提是保證兩個(gè)指針單調(diào)遞增瓮孙,剩余邏輯就是處理指針移動(dòng)的邏輯。
java代碼如下:
public int lengthOfLongestSubstring(String s) { int start = 0; int end = 0; int res = 0; //記錄出現(xiàn)的位置 int[] array = new int[128]; while (end < s.length()) { int index = s.charAt(end); //移動(dòng)start指針 start = Math.max(start, array[index]); //移動(dòng)end指針 end += 1; //計(jì)算最大窗口 res = Math.max(res, end - start); //記錄出現(xiàn)字符位置选脊,重置start指針準(zhǔn)備 array[index] = end; } return res; }