预备知识
1、哈希表 unordered_set
重要函数 count(value)
返回1或0 表示哈希表是否存在此值
题目描述
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
测试数据
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
思路
利用滑动窗口思想,两个左右指针分别指向窗口的边界,指针之差即为窗口的长度,枚举每一个左指针指向下标的最大长度,每一次循环左指针右移一位,且循环中右指针不断右移,直到出现重复字符
代码:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
unordered_set<char>occ;
int n=s.size();
int ans=0;
int left=0;
int right=0;
for(int i=0;i<n;i++)
{ if(i!=0)
occ.erase(s[i-1]);
while(right<n&&!occ.count(s[right]))
{occ.insert(s[right]);
right++;
}ans=max(ans,right-left );
left++;
}
return ans;
}
};