-
问题描述
- 给定一个字符串
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; }