思路 讲述看到这一题的思路 定义一个窗口,每次迭代时,首先右窗口开始移动,当发现右窗口的值和左窗口的值相等时,即存在重复字符,那么左窗口+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;
}
};