LeetCode 最长不含重复字符的子字符串 尺取法

问题:

请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度

思路1:

枚举每一个字符si,维持左指针left,代表最后一个重复的字符所在的位置,而且sbe+1~si-1之间没有重复的字符。

当cntsi>left时,我们会更新left=cnti,每次我们更新字符si所在的最大位置cntsi=i。每次我们会得到以第i个字符结尾的不重复字符的串的长度,每次取最大值就好了。

LeetCode 最长不含重复字符的子字符串 尺取法_第1张图片

代码:

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int s1=s.size();
        if(s1==0)return 0;
        vectorcnt(226,-1);
        int ans=0,left=-1;
        for(int r=0;rleft)
            {
                left=cnt[s[r]];
            }
            cnt[s[r]]=r;
            ans=max(ans,r-left);
        }
        return ans;
    }
};

思路2:

 

你可能感兴趣的:(数据结构篇)