无重复字符的最长子串
无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
(1)使用HashSet求解:
此解也为官方解答:
class Solution {
public int lengthOfLongestSubstring(String s) {
//创建HashSet集合
HashSet<Character> oo = new HashSet<Character>();
int right = -1; //定义右指针
int ans = 0; //定义一个需要返回的值
int left = 0; //定义左指针
int n = s.length();
for(; left < n; left++){
//如果左指针不为0,做出判断
if(left != 0){
//左指针向右移动,删除一个字符
oo.remove(s.charAt(left - 1));
}
//如果左指针为0,开始对右指针进行操作,进入循环
while(right + 1 < n && !oo.contains(s.charAt(right + 1))) { // 特别注意: 对于该条件的判断得详
oo.add(s.charAt(right + 1));
right++;
}
//从left到right个字符是一个极长的字符串
ans = Math.max(ans, (right - left + 1));
}
return ans;
}
}
参考链接力扣