码迷,mamicode.com
首页 > 其他好文 > 详细

3. Longest Substring Without Repeating Characters

时间:2016-01-28 07:04:43      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:

Two pointers 配合 HashSet

相当于控制一个小窗,如果下一个字母是新的字母,那小窗就往右移一格,同时检查一下是不是最大长度,如果下一个字母是有重复的,那么就让小窗的左侧往右移动到第一个不是该字母的地方。

需要注意的是,小窗左侧移动的时候,小窗右侧也要往右边移动一次,不然下一轮检查的时候,对于同一个字母会检查两次,前面的都被删光了

 1     public int lengthOfLongestSubstring(String s) {
 2         if(s == null || s.length() == 0) {
 3             return 0;
 4         } 
 5         int walker = 0;
 6         int runner = 0;
 7         int maxLen = 0;
 8         Set<Character> set = new HashSet<Character>();
 9         while(runner < s.length()) {
10             char c = s.charAt(runner);
11             if(set.contains(c)) {
12                 while(s.charAt(walker) != c) {
13                     set.remove(s.charAt(walker));
14                     walker++;
15                 }
16                 walker++;
17                 runner++;
18             } else {
19                 set.add(c);
20                 runner++;
21                 maxLen = (maxLen < runner - walker)? (runner - walker): maxLen;
22             }
23         }
24         return maxLen;
25     }

 

bug记录:

犯了一个特别隐蔽的傻错误,在第13,14行的地方,我先walker++,再remove,那么就删错了字母………………

 

3. Longest Substring Without Repeating Characters

标签:

原文地址:http://www.cnblogs.com/warmland/p/5165064.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!