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

题目:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 :
输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。 是哪个子串不重要。

思路:滑动窗口思想
遍历s,并判断s[i]在容器lookup中是否有重复元素,若有的话,使用while循坏,清除掉lookup中s[i]前面的元素(s[i]不清除)。若没有重复,则将s[i]插入lookup容器中,并使用函数max(当前长度,此前最长的长度)求最大的长度。

补充知识:
set/multiset容器(unordered_set容器)
简介:所有元素都会在插入时自动被排序
本质:set/multiset属于关联式容器,底层结构用二叉树实现。
set和multiset区别:set不允许容器中有重复的元素,但是multiset允许容器中有重复的元素
unordered_set容器插入时不会自动排序,且不允许有重复元素。

int lengthOfLongestSubstring(string s) {
        int left = 0;
        int maxStr = 0;
        unordered_set lookup;    //创建一个容器,与set的区别是没有排好序的。
        if(s.size() == 0)    //若字符s为空,则返回0。
            return 0;
        for(int i=0; i

你可能感兴趣的:(leetcode 刷题 题3. 无重复字符的最长子串)