--- tags: LeetCode --- # 3. Longest Substring Without Repeating Characters (Medium) Given a string, find the length of the longest substring without repeating characters. Example 1: Input: "abcabcbb" Output: 3 > Explanation: The answer is "abc", with the length of 3. Example 2: Input: "bbbbb" Output: 1 > Explanation: The answer is "b", with the length of 1. Example 3: Input: "pwwkew" Output: 3 Explanation: > The answer is "wke", with the length of 3. Note that the answer must be a substring, "pwke" is a subsequence and not a substring. 輸入範本如下 ```C# public class Solution { public int LengthOfLongestSubstring(string s) { } } ``` ### 直覺想法 這題我覺得頗難 Orz. 沒想法 偷看一下解法後 , 發現可以用 Sliding Window 的概念去解. 1. 走訪字串過程中 , 若發現該字存在於 set 中 , 則移除 l 指標所指向的字 , 直到移除該字為止. 若不存在於 set 中 , 則計算此段的連續不重複字串的長度是否大於前者 , 若是則取代前者. ```C# 96 ms 25.7 MB You are here! Your runtime beats 51.60 % of csharp submissions. public int LengthOfLongestSubstring(string s) { HashSet<char> set = new HashSet<char>(); int max = 0; for (int l = 0, r = 0; r < s.Length;) { if (!set.Contains(s[r])) { max = Math.Max(r - l + 1, max); set.Add(s[r++]); } else { set.Remove(s[l++]); } } return max; } ``` 2. 若是有紀錄位置 , 則 l 的移動可以一步到位 , 不需要一次一次移動. - 使用 Dictinary 實作 ```C# 84 ms 25.9 MB You are here! Your runtime beats 82.65 % of csharp submissions. public int LengthOfLongestSubstring(string s) { Dictionary<char, int> dict = new Dictionary<char, int>(); int max = 0; for (int l = 0, r = 0; r < s.Length; r++) { if (dict.ContainsKey(s[r])) { l = Math.Max(l, dict[s[r]]); } dict[s[r]] = r + 1; max = Math.Max(r - l + 1, max); } return max; } ``` - 使用 int[] 實作 ```C# 80 ms 25.9 MB You are here! Your runtime beats 91.75 % of csharp submissions. public int LengthOfLongestSubstring(string s) { int[] dict = new int[256]; int max = 0; for (int l = 0, r = 0; r < s.Length; r++) { l = Math.Max(l, dict[s[r]]); max = Math.Max(max, r - l + 1); dict[s[r]] = r + 1; } return max; } ``` ### Thank you! You can find me on - [GitHub](https://github.com/s0920832252) - [Facebook](https://www.facebook.com/fourtune.chen) 若有謬誤 , 煩請告知 , 新手發帖請多包涵 # :100: :muscle: :tada: :sheep: