描述:
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例:
输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。想法:
遍历字符串,记录符合的字符串的起点与终点,字典进行添加删除遍历字符串方式不一样,根据起始点遍历,列表进行添加删除推荐:删除元素时直接删除一串,而不是一个一个删除 static public int LengthOfLongestSubstring(string s) { if (s.Length < 2) return s.Length; Dictionary<char, int> dic = new Dictionary<char, int>(); int left = 0, right = 0, result = 0; for (int i = 0; i < s.Length; i++) { while (dic.ContainsKey(s[i])) { dic.Remove(s[left]); left++; } dic.Add(s[i], i); right++; if (right - left >= result) result = right - left; } return result; } static public int LengthOfLongestSubstring(string s) { if (s.Length < 2) return s.Length; List<char> list = new List<char>(); int left = 0, right = 0, result = 0; for (; right < s.Length;) { if (list.Contains(s[right])) { list.Remove(s[left]); left++; } else { list.Add(s[right]); right++; result = (right - left) > result ? (right - left) : result; } } return result; } public int LengthOfLongestSubstring(string s) { List<char> ls = new List<char>(); int intMaxLength = 0; for (int i = 0; i < s.Length; i++) { if (ls.Contains(s[i])) { ls.RemoveRange(0, ls.IndexOf(s[i]) + 1); } ls.Add(s[i]); intMaxLength = ls.Count > intMaxLength ? ls.Count : intMaxLength; } return intMaxLength; }