剑指offer 49- 最长不含重复字符的子字符串

2021-05-29  本文已影响0人  顾子豪

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

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

输入:"abcabc"

输出:3

分析:双指针算法
i,j两个指针,当j指针大于1以后,i++,直到j指针所在的字符等于1
时间复杂度:
O({N})

class Solution {
public:
    int longestSubstringWithoutDuplication(string s) {
        int res=0;
        unordered_map<char, int> hash;
        //i,j两个指针,当j指针大于1以后,i++,直到j指针所在的字符等于1
        for(int i=0,j=0;j<s.size();j++) {
            hash[s[j]]++;
            while(hash[s[j]] > 1) hash[s[i++]]--;
            res = max(res, j-i+1);
        }
        return res;
    }
};
上一篇下一篇

猜你喜欢

热点阅读