Given a string, find the length of the longest substring without repeating characters. * For example, the longest substring without repeating letters for “abcabcbb” is “abc”, * which the length is 3. For “bbbbb” the longest substring is “b”, with the length of 1. * * 題目大意: * 給定一個字符串,找字符中的最大非重復子串 * Longest Substring Without Repeating Characters * 解題思路:當遇到字符串中相同的字符時,先計算runner和walker的差值,該差值就是當前不重復的字符的個runner跑的比較,快將walker移到前一個相同字符的位置并加1,下次再查找相同的字符時,就從當前的walker的位置開始查找。依次查找下去。
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))) { if (max < runner - walker) { max = runner - walker; } while (s.charAt(walker) != s.charAt(runner)) { set.remove(s.charAt(walker));** //我覺得這句話沒有啥作用,因為他并沒有正確的保存不重復的字符串, 所以刪除也不影響結果的輸出,如果有人覺得這句話有用,麻煩跟小弟說一下,謝謝** walker++; } walker++; } else { set.add(s.charAt(runner)); } runner++; } for (Character character : set) { System.out.新聞熱點
疑難解答