无重复字符的最长子串

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

输入样例:"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  黑码头  阅读(211)  评论(0)    收藏  举报