1 /** 2 * 3 */ 4 package solution; 5 6 import java.util.HashMap; 7 8 /** 9 * @author whh 10 * 11 * Given a string, find the length of the longest substring without 12 * repeating characters. For example, the longest substring without 13 * repeating letters for "abcabcbb" is "abc", which the length is 3. For 14 * "bbbbb" the longest substring is "b", with the length of 1. 15 */ 16 public class LongestSubstringWithoutRepeatingCharacters { 17 18 /** 19 * @param args 20 */ 21 public static void main(String[] args) { 22 String s1 = "abcabcbb", s2 = "aaa", s3 = "abcdefghijklmnopqrstuvwxyz"; 23 String s4 = "wlrbbmqbhcdarzowkk"; 24 String s5 = "qopubjguxhxdipfzwswybgfylqvjzhar"; 25 System.out.println(lengthOfLongestSubstring(s1)); 26 System.out.println(lengthOfLongestSubstring(s2)); 27 System.out.println(lengthOfLongestSubstring(s3)); 28 System.out.println(lengthOfLongestSubstring(s4)); 29 System.out.println(lengthOfLongestSubstring(s5)); 30 31 } 32 33 /** 34 * @param s 35 * @return 36 */ 37 public static int lengthOfLongestSubstring(String s) { 38 39 HashMap<Character, Integer> map = new HashMap<Character, Integer>(); 40 41 int begin = 0, maxLength = 0; 42 for (int end = 0; end < s.length(); end++) { 43 Character character = s.charAt(end); 44 if (!map.containsKey(character)) { 45 map.put(character, 1); 46 } else { 47 map.put(character, map.get(character) + 1); 48 } 49 50 if (map.get(character) == 2) { 51 while (map.get(s.charAt(begin)) <= 1) { 52 map.put(s.charAt(begin), map.get(s.charAt(begin)) - 1); 53 begin++; 54 } 55 map.put(s.charAt(begin), map.get(s.charAt(begin)) - 1); 56 begin++; 57 } 58 if ((end - begin + 1) >= maxLength) { 59 maxLength = end - begin + 1; 60 } 61 } 62 63 return maxLength; 64 } 65 }