Skip to main content

无重复字符的最长子串3

地址:https://leetcode.cn/problems/longest-substring-without-repeating-characters/description/

题干

给定一个字符串 s ,请你找出其中不含有重复字符的 最长 的长度。

示例 1:

输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。注意 "bca" 和 "cab" 也是正确答案。

示例 2:

输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

示例 3:

输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

提示:

0 <= s.length <= 5 * 104
s 由英文字母、数字、符号和空格组成

思路

依然是滑动窗口,用一个set来存储窗口的字符。

题解

class Solution {
public:
int lengthOfLongestSubstring(string s) {
if(s.size()==0) return 0;
int lptr=0;
int rptr=0;
unordered_set<char> slided_window;// 存储当前窗口内的字符
int maxLen = 0;
for(rptr;rptr<s.size();++rptr){
// 如果当前字符已经在窗口中,移动左指针直到可以加入
while(slided_window.find(s[rptr])!=slided_window.end()){// 这就是找到了的意思
slided_window.erase(s[lptr]);// 删掉这个重复的元素
lptr++;// 左指针继续往前探索
}
slided_window.insert(s[rptr]);// 没有重复的了,可以加新的,新的元素在右指针这里
maxLen = max(rptr-lptr+1,maxLen);

}
return maxLen;
}
};

本文字数:0

预计阅读时间:0 分钟


统计信息加载中...

有问题?请向我提出issue