標籤:star ext style ++ nbsp long ann cab public
Longest Substring Without Repeating Characters(最長的子串不重複字元)
題目要求:給定一個字串,找到最長的子字串的長度,要求不重複字元。
例如:
給定一個字串“abcabcbb”,答案是“abc”,長度是3。
給定一個字串“bbbbb”,答案是“b”,長度是1。
給定一個字串“pwwkew”,答案是“wke”,長度是3。
注意:答案必須是一個子字串,“pwke”是一個子序列,而不是一個子字串。
解法一:
思路:基本思想為建立一個散列表來儲存字串中的字元。以字元為鍵,字元所處位置為值。設定兩個值start,end來掃描字串,同時更新散列表。如果該字元已經存在於散列表中,則更新start值,將start值賦值為最後找到的同一個字元的右側。
1 public class LongestSubstringWithoutRepeatingCharacters { 2 3 public static void main(String[] args) { 4 Scanner scanner = new Scanner(System.in); 5 String string = scanner.nextLine(); 6 System.out.println("最長不重複子串的長度為:" + lengthOfLogestSubstring(string)); 7 } 8 9 10 public static int lengthOfLogestSubstring(String s) {11 int max = 0;12 Map<Character, Integer> map = new HashMap<>();13 for (int start = 0,end = 0; end < s.length(); end++) {14 if (map.containsKey(s.charAt(end))) {15 start = Math.max(start, map.get(s.charAt(end))+1);16 }17 map.put(s.charAt(end), end);18 max = Math.max(max, end-start+1);19 }20 return max;21 }22 }
03.Longest Substring Without Repeating Characters