所有最长不重复子串-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);

直接刷题把,好混乱,快排又不可以五分钟写出来,

#你觉得今年春招回暖了吗#
全部评论

相关推荐

05-20 21:57
已编辑
门头沟学院 Java
喜欢吃卤蛋的悲伤蛙在提需求:建信融通没消息吧,我2说有实习挂简历不理了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务