最长不重复子串是一个常见的算法题,一般采用滑动窗口的解决办法。通过两个移动的下标来解决。
public static String maxNoRepeatSubstring(String s){
Set<Character> set = new HashSet<>();
int maxLen = 0;
int start = 0;
int i = 0, j = 1;
set.add(s.charAt(0));
while(i < s.length() && j < s.length()){
if(set.contains(s.charAt(j))){
set.remove(s.charAt(i));
i++;
}else {
set.add(s.charAt(j));
if(j - i + 1> maxLen){
maxLen = j - i + 1;
start = i;
}
j++;
}
}
return s.substring(start, start + maxLen);
}