美文网首页双指针
【剑指 offer】最长不含重复字符的子字符串(双指针)

【剑指 offer】最长不含重复字符的子字符串(双指针)

作者: 邓泽军_3679 | 来源:发表于2019-05-04 16:38 被阅读0次

    1、题目描述

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

    假设字符串中只包含从’a’到’z’的字符。

    样例:

    输入:"abcabc"
    输出:3

    2、问题描述:

    3、问题关键:

    • 双指针做法, 一个前j,一个后i, 求最长的区间( j - i + 1 )。
    • 便于查找,可以用一个hash表,如果遇到重复的,移动i直到,不再出现重复的。

    4、C++代码:

    class Solution {
    public:
        int longestSubstringWithoutDuplication(string s) {
            unordered_map<char, int> m;//hash表便于查找。
            int res;
            for (int i = 0, j = 0; j < s.size(); j ++) {
                while(m[s[j]]) m[s[i ++]] --;//如果出现重复的,那么移动i直到不再出现重复的为止。
                m[s[j]] = 1;//否则,记录到hash表中,
                res = max(res, j - i + 1);//记录最长的区间。
            }
            return res;
        }
    };
    

    相关文章

      网友评论

        本文标题:【剑指 offer】最长不含重复字符的子字符串(双指针)

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