@无重复字符串
题目
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
示例
输入: s = “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3
算法
参考滑动窗口
窗口内是每个无重复字符串子字符串
只需要检查窗口内是否含有重复字符即可
代码
class Solution {
public:
int lengthOfLongestSubstring(string s) {
unordered_set<char> occr ; //定义hash表
int ans = 0 ,r = -1 ;
int n = s.size() ;
for (int i=0 ; i<n ; i++)
{
if(i != 0 )
{
occr.erase(s[i-1]) ; //消除做左指针前一个元素
}
while(r+1< n && !occr.count(s[r+1]))
{
occr.insert(s[r+1]) ;
r++ ;
}
ans = max(ans,r-i+1) ;
}
return ans ;
}
};