c++的算法学习之滑动窗口求最长的无重复的子字符串

/***
 * 问题:无重复字符的最长子串
 * 方法:滑动数组法
 * 主要思想:相当于双指针对撞和二分搜索法一个在左边一个在右边
 * 当数组中出现重复的元素时则将左边的下标向右边移动一位
 * 直到数组中所有的元素都不重复即可
 * 而长度就等于右边的减去左边的
 *
*/

class Solution {
private:
    int res=0;
    int p[256]={0};
public:
    int lengthOfLongestSubstring(string s) {
        int left=0;
        int right=-1;
        while(left<s.size())
        {
            if(right+1<s.size()&&p[s[right+1]]==0)
                p[s[++right]]++;
            else
                p[s[left++]]--;
            res=max(res,right-left+1);
        }
        return res;
    }
};

 

posted @ 2019-10-29 17:17  pycodego  阅读(387)  评论(0编辑  收藏  举报