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

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

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;
    }
};

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!