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 }
来源:https://www.cnblogs.com/mrjoker-lzh/p/9768584.html