题目描述
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
题目示例
题目分析
如果S[i,j)不包含重复字符,s[j+1]不在[i,j)中,那么最长为[i,j+1),否则窗口从s[j’+1,j+1]重新开始计数,j’为字符重复位置。
java代码
public int lengthOfLongestSubstring(String s) {
if(s == null || "".equals(s)){
return 0;
}
// 使用滑动窗口解决这个问题
// 同时使用hashmap加快查找速度
Map<Character,Integer> map = new HashMap<>();
int maxLength = 0;
int length = 0;
int i = 0;
int j = 0;
while(i<s.length() && j<s.length()){
if(map.containsKey(s.charAt(j))){
System.out.println(s.substring(i,j));
// 防止i指针向前
i = Math.max(i,map.get(s.charAt(j))+1);
}
length = j - i + 1;
maxLength = Math.max(maxLength,length);
map.put(s.charAt(j),j);
j++;
}
return maxLength;
}