最长无重复子串
来源:互联网 发布:淘宝保暖卫衣长款 编辑:程序博客网 时间:2024/05/17 08:43
思路:
滑动窗口,i为左窗口,j为右窗口。
当(i,j)内无重复时,j一直右移,直至有重复j’,此时移动i,一步一步移动到重复元素后面一位(j’+1),或者直接移到(j’+1)。
代码一:HashSet O(2n)
public int lengthOfLongestSubstring(String s) { int i=0,j=0,ans=0; HashSet<Character> set = new HashSet<>(); while(i<s.length() && j< s.length()){ if(!set.contains(s.charAt(j))){ set.add(s.charAt(j++)); ans = Math.max(j-i,ans); }else{ set.remove(s.charAt(i++));// 一步一步移动至重复元素后一位 } } return ans;}
代码二:HashMap O(n)
public int lengthOfLongestSubstring(String s) { int n = s.length(), ans = 0; Map<Character, Integer> map = new HashMap<>(); int i = 0, j = 0; for (; j < n; j++) { if (map.containsKey(s.charAt(j))) { i = Math.max(map.get(s.charAt(j)), i); // 直接获取该重复元素的下标,重复元素的下标会改变,所以保留最大下标 } ans = Math.max(ans, j - i + 1); map.put(s.charAt(j), j + 1); } return ans;}
阅读全文
0 0
- 最长无重复子串
- 最长无重复子串
- 最长无重复子串
- 最长无重复字符的子串
- 最长无重复字符子串
- 最长无重复字符子串
- 最长无重复字符子串
- 最长无重复字符的子串
- 找出最长无重复子串
- 最长无重复字符子串练习题
- 最长无重复字符子串
- 最长无重复字符的子串
- 最长无重复字符的子串
- 最长无重复字符子串
- 最长无重复字符的子串
- 最长无重复字符的子串
- 最长无重复字符子串
- 最长无重复字符子串
- 颜色选择
- 排座位 二分图最大匹配 搜索
- BZOJ4952 [Wf 2017] 二分答案 解题报告
- (转)理解javascript的同步与异步模式
- 11.4解题报告
- 最长无重复子串
- Java基础1
- B
- 11.4 总结
- 第八周——“对称矩阵压缩存储的实现与应用”
- OSI 七层 及相关协议
- 装饰器、迭代器、生成器
- spring:控制反转
- NIO-结合Selector设计一个简易WebServer