1. 暴力解法(复杂度O(n^2))
#include <cstring>
class Solution {
public:
int lengthOfLongestSubstring(string s) {
if(s=="") return 0;
string subs="";//sliding window
int l=0,r=0;
int max = 0;
for(;l<s.length();l++)
{
r=l;
subs += s[l];
while(r<s.length()-1)
{
if(subs.find(s[r+1])==subs.npos)//unique
{
r++;
subs+=s[r];
//cout<<"subs: "<<subs<<endl;
}
else //same
break;
}
if(r-l>max)
max = r-l;
subs="";
}
return max+1;
}
};
2. 滑动窗口解法
class Solution {
public:
int lengthOfLongestSubstring(string s) {
if(s=="") return 0;
//sliding window
unordered_set<char> window;
int n=s.size();
int r=-1,sum=0;
for(int l=0;l<n;l++)
{
if(l!=0)
window.erase(s[l-1]);//移除左侧一个
while(r+1<n && !window.count(s[r+1]))//移除之后可以继续滑动,不需要else
{
r++;
window.insert(s[r]);
}
sum = max(sum, r-l+1);
// cout<<"string: ";
// for(unordered_set<char>::iterator it=window.begin();it!=window.end();it++)
// cout<<*it;
// cout<<endl;
}
return sum;
}