无重复字符的最长子串

输入一串字符串,输出不含重复字符的子串长度

输入样例:"abcabcbb"

输出:3。

输入样例:"bbbcbcb"

输出:2。

C++代码

int lengthOfLongestSubstring(string s) {
​
•    unordered_set<char> set;
​
•    int length = s.size();
​
•    int ans = 0;
​
•    int rk = -1;
​
•    for(int i=0;i<length;i++){
​
•      if(i!=0){
​
•        set.erase(s[i-1]);
​
•     }
​
•      while(rk+1<length&&!set.count(s[rk+1])){
​
•        set.insert(s[rk+1]);
​
•        ++rk;
​
•     }
​
•      ans = max(ans,rk+1-i);
​
•   }
​
•    return ans;
​
}

目标是找出最长子串,我们设置两个指针(i,rk),i指向字串的头,rk指向字串的尾部,每次向结果子串中添加字符时,判断结果字串中是否已存在。如果存在,更新最长子串长度,删去结果子串的头部字符(因为我们要找的是连续的最长子串),继续向后遍历。

posted @ 2021-11-11 15:52  黑码头  阅读(213)  评论(0)    收藏  举报