Longest Substring Without Repeating Characters
来源:互联网 发布:淘宝教育怎么入驻 编辑:程序博客网 时间:2024/06/08 06:41
这是O(N)的方法,维护窗口的左边和右边,右边不断向左走,当发现这个窗口里面有重复的时候,我们移动左边到重复元素的下一个,跳过中间的字符,因为不会比现在的max更长,而且也始终包含重复的字符。走到无重复了,我们继续移动右边。所以,表面看上去有while loop嵌套在另一个while loop里面,但是我们不重复之前走过的位置,所以时间复杂度还是O(N)的。
public int lengthOfLongestSubstring(String s) { if(s==null || s.length() == 0) return 0; HashSet<Character> set = new HashSet<Character>(); int max = 0; int walker = 0; int runner = 0; while(runner < s.length()){ if(set.contains(s.charAt(runner))){ max = Math.max(runner-walker,max); while(s.charAt(walker)!=s.charAt(runner)){ set.remove(s.charAt(walker)); walker++; } walker++; } else set.add(s.charAt(runner)); runner++; } max = Math.max(max,runner-walker); return max; }
下面是动态规划思维用hashset维护一个装满前面遇到的所有char的集合,只要集合增加我们的max就增加,一旦重复,就从头查看。但是因为是O(N*N)的时间复杂度,所以果断TLE过不了的囧。
public int lengthOfLongestSubstring(String s) { if(s==null || s.length() == 0) return 0; int len = s.length(); int i = 0; int j = 1; int max = 0; HashSet<Character> set = new HashSet<Character>(); while(i < len) { set.add(s.charAt(i)); j = i + 1; while(j < len) { if(!set.contains(s.charAt(j))) { max = Math.max(j - i, max); set.add(s.charAt(j)); j++; //i++; } else { set.clear(); break; } } i++; } return max; }
0 0
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- AddPrinterDriver function
- EnumPrintProcessors function
- DRIVER_INFO_6 structure
- poj 1208 The Blocks Problem 模拟+vector的使用
- Android多线程断点下载文件
- Longest Substring Without Repeating Characters
- Leetcode - Add Binary -Jan 30, 2015
- poj 2160 Box 模拟
- DevCon 命令行实用工具可替代设备管理器
- HTML5 声明兼容IE的写法
- 养成定时更新内容的好习惯,提高搜索引擎时效性收录
- lv官方網 wqdx axsr jguq
- 最大子列和问题
- Two Sum Closest to K