给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
两种写法,均是滑动窗做法
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int l = 0,r = 0;
int len = 0,n = s.size();
int len_c = 0;
while(r<n)
{
char ch = s[r];
for(int i = l;i<r;++i)
{
if(s[i] == ch)
{
l = i + 1;
len_c = r - l;
break;
}
}
++r;
len_c++;
len = max(len,len_c);
}
return len;
}
};
class Solution {
public:
int lengthOfLongestSubstring(string s) {
std::unordered_set<char>uset;
int sec = -1;
int len = 0;
for(int fst = 0;fst<s.size();++fst)
{
if(fst != 0)
{
uset.erase(s[fst-1]);
}
while(sec+1<s.size() && uset.count(s[sec+1]) == 0)
{
uset.insert(s[sec+1]);
++sec;
}
len = max(len,sec-fst+1);
}
return len;
}
};