所有最长不重复子串-Set遍历
晕死,刷三遍脑子就是记不住。
left = Math.max(hashMap.get(c)+1, left);
我也不知道为什么,就一行代码,死都记不住。
遍历的时候,left代表第一个字符,当遍历的字符存在于字符map的时候,
假设abba
此时left已经变成了2,因为b重复,然后a存储的0
所以此时如果left本身大于a的位置,也就是我们不需要管a了
假设不大于,因为a和当前遍历的重复了,所以我们需要跳过当前字符到下一个位置
因此实际上就是跳过字符map中a对应的位置,也就是map.get(c)+1;然后和left比较
选择最大值即可,因为left可能因为之前已经跳过很多次,早就离开了原来的a
所以记住
每次遍历到重复的字符,跳过这个字符map对应的位置,也就是get(c)+1,和Left比较取最大值
然后map.put(c,i);
maxLen = max(maxLen, i-left+1)
然后要存储所有的,首先每次遍历都有一个len,和起始位置left
所以直接Map<Integer,List<Integer>> map
map.put(len, map.getOrDefault(len,new ArrayList<Integer>()).add(left));
最后就是map,get(maxLen), 遍历List,substring,存入set
Set<String>,
String[] ans
然后Iterator iter = set.iterator()
while(iter.hasNext()), ans[index++] = iter.next()
或者直接for(String str: set)
或者 set.toArray(ans);
直接刷题把,好混乱,快排又不可以五分钟写出来,
#你觉得今年春招回暖了吗#