方法一 暴力法
遍历,用set遍历是否有相同字符
class Solution {
public int lengthOfLongestSubstring(String s) {
int n=s.length();
int ans=0;
for(int i=0;i<n;i++)
{
for(int j=i+1;j<=n;j++)
{
if(all(s,i,j))
ans=Math.max(ans,j-i);
}
}
return ans;
}
public boolean all(String s,int start,int end)
{
Set<Character> set=new HashSet<> ();
for(int i=start;i<end;i++)
{
Character ch=s.charAt(i);
if(set.contains(ch))
return false;
set.add(ch);
}
}
return true;
}
方法二 滑动窗口
class Solution {
public int lengthOfLongestSubstring(String s) {
int n=s.length();
int ans=0;
Map<Character,Integer> map=new HashMap<>();
for(int j=0,i=0;j<n;j++)
{
if(map.containsKey(s.charAt(j)))
{
i=Math.max(map.get(s.charAt(j)),i);
}
ans=Math.max(ans,j-i+1);
map.put(s.charAt(j),j+1);
}
return ans;
}
}