题目链接 3. 无重复字符的最长子串
给定一个字符串
s
,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:
输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
- 1
- 2
- 3
示例 2:
输入: s = "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
- 1
- 2
- 3
示例 3:
输入: s = "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
- 1
- 2
- 3
- 4
在这个字符串里面找一个子数组,我们保证子数组的元素都不重复,返回我们子数组里面的最长的长度.
这里我们一分析,我们就可以使用暴力解法,拿到所有的子数组,然后判断.但是这里我们可以使用滑动窗口.既然使用滑动窗口,那么我们就需要一个判断依据,下面就是
收集滑动窗口里面所有的元素,拿到一个新的字符和这些字符判断.
这个题目写的比较粗糙,毕竟大家非常熟悉双指针了.大家看代码,我在代码里面写一些注释方面大家理解.
class Solution
{
public:
int lengthOfLongestSubstring(string s)
{
int left = 0;
int right = 0;
unordered_map m;
int result = 0;
for (; right < s.size(); ++right)
{
m[s[right]]++; // 入窗口
while (m[s[right]] > 1) // 判断
{
m[s[left++]]--; // 出窗口
}
result = max(result, right - left + 1); // 更新结果
}
return result;
}
};