无重复字串的长度
https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
import java.util.HashSet;
import java.util.Set;
public class Solution {
public int lengthOfLongestSubstring(String s){
int n = s.length();
Set<Character> set = new HashSet<>();
int left= 0, right = 0,ans = 0;
while(left<n && right<n){
if(!set.contains(s.charAt(right))){
set.add(s.charAt(right));
right++;
ans = Math.max(ans,right-left);
} else {
set.remove(s.charAt(left));
left++;
}
}
return ans;
}
}
思路:使用set存放不重复的字符,两个指针记录起始位置、终止位置,
如果当前位置不在集合里 终止位置向后移动,
如果在集合里面,起始位置指针向后移动一个位置
ans存储的是每一次字串的长度