美文网首页
3. 无重复字符的最长子串

3. 无重复字符的最长子串

作者: 乘瓠散人 | 来源:发表于2021-04-23 15:52 被阅读0次

    题目:给定一个字符串,找出其中不含重复字符的最长子串的长度。比如'abba'的最长子串长度为2。
    思路:假设我们选择字符串中第k个字符作为起始位置,并且得到了不包含重复字符的最长子串的结束位置为r,那么当选择第k+1个字符为起始位置时,首先从k+1到r之间的字符显然是不重复的,并且由于少了原本的第k个字符,可以尝试增大r,直到出现了重复字符为止。
    因此用滑动窗口实现,使用两个指针表示字符串中某个子串(窗口)的左右边界。在每一步操作中,将左指针右移一格,表示开始枚举下一个字符作为起始位置,然后不断右移右指针,直到出现了重复字符,记录下当前(窗口)子串的长度。最后返回最长的子串长度。

    int lengthOfLongestSubstring(string s) {
        unordered_set<char> st;
        int res = 0;
        int right = 0;
    
        for (int i=0; i<s.length(); i++) {
            while (right < s.length() && st.count(s[right])==0) {
                st.insert(s[right]);
                right++;
            }
            int cnt = right - i;
            if (cnt > res) res = cnt;
    
            st.erase(s[i]);
        }
        return res;
    }
    
    

    相关文章

      网友评论

          本文标题:3. 无重复字符的最长子串

          本文链接:https://www.haomeiwen.com/subject/apicrltx.html