#include<iostream>
#include<string>
#include<unordered_set>
using namespace std;
//如果用暴力求解,思路是穷举所有的字符串,逐个检查是否满足不重复
//这里用滑动窗口法
class Solution {
public:
int lengthOfLongestSubstring(string s) {
unordered_set<char>set;//集合不包含重复元素
int rk = -1;//右指针
int ans = 0;//结果
for (int i = 0; i < s.size(); i++)//i为左指针
{
if (i != 0)
{
set.erase(s[i-1]);//左指针右滑
}
//两个条件,下一个位置没到终点,集合中没有出现下一元素
while (rk + 1 < s.size() && !set.count(s[rk+1]))
{
set.insert(s[rk+1]);
rk++;
}
ans = max(ans, rk - i + 1);
}
return ans;
}
};
int main()
{
Solution test;
string s = "abcabcbb";
cout << test.lengthOfLongestSubstring(s) << endl;
}
07-23
9237
09-18
891
04-07