题目描述
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: s = “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:
输入: s = “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:
输入: s = “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。
图片讲解算法核心 滑动窗口,保证每个窗口里字母都是唯一的
static public int LengthOfLongestSubstring(string s)
{
if (string.IsNullOrEmpty(s))
return 0;
if (s.Length < 2)
return s.Length;
int l = 0;//定义left指针
int r = 0;//定义right指针
int maxlen = 0;//定义结果maxlen
Dictionary<char, int> charSet = new Dictionary<char, int>();//定义哈希表charSet
while (r < s.Length)
{
if (!charSet.ContainsKey(s[r]))
{
//将字符加到哈希表中, right指针自增
charSet.Add(s[r++], r);
maxlen = Math.Max(maxlen, r - l);//计算结果
}
else
{
if (r == s.Length - 1)
return maxlen;
//删除哈希表中重复的字符, left自增
charSet.Remove(s[l++]);
}
}
return maxlen;
}