无重复字符串最长字串-滑动窗口法
代码如下:
class Solution {
public static int lengthOfLongestSubstring(String s) {
// 1.
List<Integer> list = new ArrayList();
Set<Character> c = new HashSet<>();
char[] arr = s.toCharArray();
int head = 0;
int tail = 0;
while (tail<arr.length) {
if (c.contains(arr[tail])) {
list.add(tail-head);
head ++;
tail = head;
c.clear();
}else {
c.add(arr[tail]);
tail++;
}
if(tail==arr.length){
list.add(tail-head);
break;
}
}
// 4.
Collections.sort(list, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
});
if(arr.length==0)
return 0;
else
return list.get(0);
}
}
思路介绍滑动窗口法:
1.将字符串转化为数组,设置一个长度数组ArrayList降序排列
2.设置两个指针head,tail同时指向起始位置0
3.设置set集合。tail进行移动, 设置出口,q移动到最后一个元素 //注:不能滑太快 dvdf==3
且判断是否在set集合内部,如果不在,那么就移动head=tail,如果在,sum=tail-head; sum将其插入到ArrayList
4.遍历完成后排序ArrayList降序,并取出ArrayList中0号元素(最大值)