Given a string, find the length of the longest substring without repeating characters.
Examples:
Given "abcabcbb"
, the answer is "abc"
, which the length is 3.
Given "bbbbb"
, the answer is "b"
, with the length of 1.
Given "pwwkew"
, the answer is "wke"
, with the length of 3. Note that the answer must be a substring, "pwke"
is a subsequence and not a substring.
思路:
滑动窗:
1、定义一个空set,用来保存遍历到的字符;
2、从头遍历字符串,将遍历到的字符与set中的元素比较,若set中没有该元素,则将窗体右侧右移一位,并更新最长子串的值;若set中有该元素,则将此元素删除,将窗体左侧左移一位;
3、重复步骤2,直到到达字符串末尾。
时间复杂度:O(n)
class Solution {
public:
int lengthOfLongestSubstring(string s) {
if(s.empty())
return 0;
int i=0,j=0,res=0;
int n=s.size();
set<int> mySet;
while(i<n&&j<n)
{
if(mySet.count(s[j])==0)
{
mySet.insert(s[j]);
j++;
res=max(res,j-i);
}
else
{
mySet.erase(s[i]);
i++;
}
}
return res;
}
};