给定一个字符串 s
,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: s = "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:文章来源:https://www.toymoban.com/news/detail-574876.html
输入: s = "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
代码如下:文章来源地址https://www.toymoban.com/news/detail-574876.html
class Solution {
public:
int lengthOfLongestSubstring(string s) {
if(s.size()==0)
{
return 0;
}
unordered_set<char> lookup;
//哈希表,用于存放字符串中所有不重复的字符
int maxstr=0;//用于记录最大不重复子串的长度
int left=0;//滑动窗口的左指针
for(int i=0;i<s.size();i++)
{
//end()函数是最后一个元素的下一个位置,所以end()对应的结果一定是元素不在无序集合内
//用lookup.find(s[i])查询元素是否在集合内并与end()做一个比较,因为lookup.end()是不在集合内,所以!=说明在集合内,=就是不在集合内
while(lookup.find(s[i])!=lookup.end())
{
lookup.erase(s[left]);//当元素在无序集合内存在时,说明元素重复了,移除左指针指向的元素
left++;//左指针向后移
}
maxstr=max(maxstr,i-left+1);//每循环一次更新一次最大不重复子串的长度
lookup.insert(s[i]);//当元素不在无序集合内时,向无序集合内添加该元素
}
return maxstr;//最终返回最大值
}
};
到了这里,关于无重复字符的最长子串的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!