程序媛詹妮弗
终身学习

Given a string, find the length of the longest substring without repeating characters.

Examples:

Given "abcabcbb", the answer is "abc", which the length is 3.

Given "bbbbb", the answer is "b", with the length of 1.

Given "pwwkew", the answer is "wke", with the length of 3. Note that the answer must be a substring, "pwke" is a subsequenceand not a substring.

 

题意:

给定一个字符串, 求其中无重复字母的最长子串

 

Solution1:

maintain a sliding window [start...i], making sure that each char in such window, its frequency is 1 (without Repeating chars)

when one char's frequency > 1, there is repeating char, then move pointer start to find the next window

 

 

 

 

code:

 1 /* 
 2    Time Complexity: O(n)
 3    Space Complexity: O(256)
 4 */
 5 class Solution {
 6     public int lengthOfLongestSubstring(String s) {
 7         // corner case 
 8         if( s == null || s.length() == 0) return 0;
 9         
10         int[] map = new int[256];
11         int result = 0;
12         int start = 0;
13         for(int i = 0; i < s.length(); i++){
14             map[s.charAt(i)] ++;
15             if(map[s.charAt(i)] > 1){
16                 while(map[s.charAt(i)] > 1){
17                     map[s.charAt(start)]--;
18                     start++;
19                 }
20             } 
21            result = Math.max(result, i - start + 1);   
22         }
23         return result;
24     }
25 }

 

 

 

 

posted on 2018-06-20 03:24  程序媛詹妮弗  阅读(186)  评论(0编辑  收藏  举报