給定一個字符串,請你找出其中不含有重複字符的 最長子串 的長度。數組
示例 1:spa
輸入: "abcabcbb" 輸出: 3 解釋: 由於無重複字符的最長子串是 長度爲 3。
示例 2:"abc",因此其
輸入: "bbbbb" 輸出: 1 解釋: 由於無重複字符的最長子串是 ,因此其長度爲 1。 "b"
示例 3:code
輸入: "pwwkew" 輸出: 3 解釋: 由於無重複字符的最長子串是 ,因此其長度爲 3。 請注意,你的答案必須是 子串 的長度, 是一個子序列,不是子串。"wke""pwke"
class Program { static void Main(string[] args) { var t= ComputeString.ComputeM("bacdcab"); Console.WriteLine(t); Console.ReadKey(); } } class ComputeString { public static int ComputeM(string str) { int len = str.Length; HashSet<char> set = new HashSet<char>(); int ans=0, start = 0, end = 0; while (start < len && end < len) { if (!set.Contains(str[end])) { set.Add(str[end++]); ans = Math.Max(ans, end - start); } else { set.Remove(str[start++]); } } return ans; } public static int LengthOfLongestSubstring(string s) { //字符串轉化爲char[]數組 var array = s.ToCharArray(); int n = array.Length, ans = 0; Dictionary<char, int> map = new Dictionary<char, int>(); for (int j = 0, i = 0; j < n; j++) { if (map.ContainsKey(array[j])) { //map[array[j]] //i(賦值號兩邊) i = Math.Max(map[array[j]], i); } ans = Math.Max(ans, j - i + 1); map[array[j]] = j + 1; } return ans; } }