leetcode 3. 无重复字符的最长子串 双指针 hashset 滑动窗口
双指针 hashset
import java.util.HashSet;
class Solution {
public int lengthOfLongestSubstring(String s) {
HashSet set=new HashSet<Integer>();
int ans=0;
for(int i=0,j=0;j<s.length();++j)
{
if(set.add(s.charAt(j))==false)
{
ans=Math.max(ans, set.size());
while(s.charAt(i)!=s.charAt(j))
{
set.remove(s.charAt(i));
i++;
}
i++;
}
else
{
ans=Math.max(ans, set.size());
}
}
return ans;
}
}
滑动窗口
import java.util.HashSet;
class Solution {
public int lengthOfLongestSubstring(String s) {
int []last =new int[200];
Arrays.setAll(last,x->-1);
int n=s.length();
int start=0,ans=0;
for(int i=0;i<n;++i)
{
int index=s.charAt(i);
start=Math.max(start,last[index]+1);
ans=Math.max(ans,i-start+1);
last[index]=i;
}
return ans;
}
}