无重复字符的最长字串
无重复字符的最长字串
前言
给定一个字符串 s
,请你找出其中不含有重复字符的 最长子串 的长度。
思想
利用两指针(变量)逐步向右遍历该字符串。
利用HashSet
数据结构约束子串具有无重复性。
利用迭代,前一字串长度与新子串长度每每比较取大值。
代码
class Solution {
public int lengthOfLongestSubstring(String s) {
//哈希集合,记录每个字符是否出现过
Set<Character> subs = new HashSet<Character>();
int n = s.length();
//1.定义变量:右指针初始为-1,代表还未移动
int r = -1;
int ans = 0;
for(int i =0;i<n;++i){
if(i!=0){
//先移动左指针,并从HashSet中移除旧的值
subs.remove(s.charAt(i-1));
}
while(r+1<n&& !subs.contains(s.charAt(r+1))){
//如果右指针还未遍历到最后,并且HashSet中没有右指针的值
//不断移动右指针
subs.add(s.charAt(r+1));
r++;
}
//逐步将新字串和旧答案比较,取大值
ans = Math.max(ans,r - i + 1);
}
return ans;
}
}
比任何人都要努力