力LeetCode 热题 100 总结——3. 无重复字符的最长子串

55 阅读1分钟

思路 讲述看到这一题的思路 定义一个窗口,每次迭代时,首先右窗口开始移动,当发现右窗口的值和左窗口的值相等时,即存在重复字符,那么左窗口+1,当右窗口移动到字符串末端时,循环结束,窗口大小即为最长字串长度

解题方法 描述你的解题方法 如何判断右窗口的值和左窗口的值(即存在重复字符):定义一个哈希表,存储字符char和字符计数的映射,例如hash[s]=1,表示字符s的计数为1; 若hash[s[j]]的值>1,就存在重复字符,此时就将左窗口i++,

本题心得:1、哈希表是一种键值之间的映射,而不是单纯的值和地址的映射(之前理解的不对) 学习unordered_map<>这一模板的用法

作者:JiaPeng Cai 链接:leetcode.cn/problems/lo… 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

public:
    int lengthOfLongestSubstring(string s) {
        unordered_map<char, int> hash;
        int res = 0;
        for (int i = 0, j = 0; j < s.size(); j++) {
            hash[s[j]]++;//将字符s[j]的计数+1
            while (hash[s[j]] > 1) {
                hash[s[i]]--;
                i++;
            }
            res = max(res, j - i + 1);
        }
        return res;
    }
};