题目描述:给定一个字符串,找出最长的无重复的子串,返回它的长度
eg
- input:abcabcbb
- output:3
Solution:Sliding Window(滑动窗口)
思想:从下标0开始,设置一个length长度的窗口,迭代向右拓展,如果右边字符没有出现在窗口中,那么length++,如果出现,那么记录窗口长度,将窗口左端设置为窗口中重复元素的下一位,依次迭代
代码:
int lengthOfLongestSubstring(string s)
{
set<char> sub_str;
int left=0;int right=0;int res=0;
while(right<s.size())
{
if(sub_str.find(s[right])==sub_str.end())
{
sub_str.insert(s[right++]);
res=max(res,(int)sub_str.size());
}
else
sub_str.erase(s[left++]);
}
return res;
}
复杂度:迭代O(n),查找O(logN),因此O(nlogn)