03.Longest Substring Without Repeating Characters

Posted mrjoker-lzh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了03.Longest Substring Without Repeating Characters相关的知识,希望对你有一定的参考价值。

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的主要内容,如果未能解决你的问题,请参考以下文章

ICS计算系统概论实验3—LC3汇编代码实现最长重复子字符串Longest-duplicate-substring

leetcode@ [30/76] Substring with Concatenation of All Words & Minimum Window Substring (Hashtab

Swift 4:不推荐使用 substring(with:)':请使用字符串切片下标 [重复]

leetcode 30 Substring with Concatenation of All Words

LeetCode Longest Substring with At Most Two Distinct Characters

Substring with Concatenation of All Words