主要解決求最長不重複子串問題
如果遇到這種題,還是開兩個for來做的話,筆試那是必stl的。
例題1:
題解:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int z, l = 0, r = 0, sum = 0;
vector<int> vi;
cin >> z;
set<int> si;
while (z--)
{
int c;
cin >> c;
vi.push_back(c);
}
while (l < vi.size() && r < vi.size())
{
if (si.find(vi[r]) == si.end())
{
si.insert(vi[r++]);
sum = max(sum, r - l);
}
else si.erase(vi[l++]);
}
cout << sum;
}
例題2:
int lengthOfLongestSubstring(string s)
{
int l = 0, r = l, sum = r;
set<char> ss;
while (l < s.size() && r < s.size())
{
if (ss.find(s[r]) == ss.end())
{
ss.insert(r++);
sum = max(sum, r - l);
}
else ss.erase(l++);
}
return sum;
}