package 练习;
import java.util.HashSet;
import java.util.Set;
/**
* 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串的长度
* 思路:动态窗口
* 需要左右俩个指针,一个存放子串容器,
* 1开始左右指针重合,判断容器中是否有右指针所指字符,无->加入,length加1,判断maxlength和length的大小,maxlength取最大的
* 2右指针右移,
* 3判断容器中是否有右指针所指字符,无->加入,有->删除容器中字符(也就是左指针所指字符),左指针右移,
* 4再次判断判断,容器中是否有右指针所指字符
*/
public class List_Node {
public static void main(String[] args) {
List_Node n1=new List_Node();
String s="pwwkew";
System.out.println(n1.lengthOfLongestSubstring(s));
}
public int lengthOfLongestSubstring(String s) {
int length=0;//左右指针之间的距离
int max_length=0;//最大子串长度
int index=0;//右指针,作用是指明删除的元素(指谁删谁)
Set<Character> list=new HashSet<>();//存放子串的容器,特点:不可重复
//i为左指针
for (int i = 0; i < s.length();) {
//判断左指针的字符是否在容器中
if (list.contains(s.charAt(i))) {
list.remove(s.charAt(index));
length--;
index++;
}else {
list.add(s.charAt(i));
length++;
i++;
if (length>max_length) {
max_length=length;
}
}
}
return max_length;
}
}