Leetcode 3无重复字符的最长字串

题目要求:给定一个字符串,找出不含有重复字符的最长子串的长度。

示例:

给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ,那么长度就是3。

给定 "bbbbb" ,最长的子串就是 "b" ,长度是1。

给定 "pwwkew" ,最长子串是 "wke" ,长度是3。请注意答案必须是一个子串"pwke" 是 子序列  而不是子串。

分析:要求无重复字符的最长字串,可以分析出我们要解决两个问题,①遍历所有字串②判断字符重复

①定义个双指针i,j,s[i...j]代表当前无重复字符字串,如果j+1的所在字符跟是s[i..j]里的不重复,那就j++把此字符添加进来,如果字符重复,肯定是跟i所在字符重复,i--把i所在位置字符去除。

②定义长度为256的数组,包含256的字符对应的码值,默认长度为0。如果为0,说明还不重复,出现一次长度加一,记录有无重复。

代码:

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int count[256]={0};//判定字串中有无重复字符
        int l=0,r=-1;//nums[l...r]为滑动窗口,扫描整个字符串
        int res=0;
        while(l<s.size())
        {
            if(r+1<s.size()&&count[s[r+1]]==0)
                count[s[++r]]++;
            else
                count[s[l++]]--;
            res=max(res,r-l+1);
        
        }
        return res;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_34691713/article/details/80266727