题目
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 :
输入: s = “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是
"abc",所以其
长度为 3。
提示:
0 <= s.length <= 5 * 10^4
s
由英文字母、数字、符号和空格组成
标签
字符串;哈希
解题思路
方法:滑动窗口
使用两个指针表示字符串中的某个子串(或窗口)的左右边界。
代码
public class Leetcode3 {
public static void main(String[] args) {
String s = "abcabcbb";
System.out.println(lengthOfLongestSubstring(s));
}
public static int lengthOfLongestSubstring(String s) {
int n = s.length();
//哈希集合,记录每个字符是否出现过
Set<Character> occ = new HashSet<Character>();
//右指针初始值为-1,表示还在字符串左边界左侧
int rk = -1, max = 0;
for (int i = 0; i < n; i++) {
if (i != 0) {
//左指针向右移动一格,移除一个字符
occ.remove(s.charAt(i - 1));
}
while (rk + 1 < n && !occ.contains(s.charAt(rk + 1))) {
//不断移动右指针
occ.add(s.charAt(rk + 1));
rk++;
}
max = Math.max(max, rk - i + 1);
}
return max;
}
}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/