LeetCode刷题-3.无重复字符的最长子串
题目链接:3.无重复字符的最长子串
¶题解:
双指针形成的滑动窗口实现!双指针被形象表示为滑动窗口!
¶题目简述:
两个概念:
- 子串:连续的
- 子序列:不一定连续,下标递增
找出一个字符串中最长不重复的子串,返回最大长度!
¶题解:
使用两个指针i, j,(j < i), 区间[j, i]表示以 i 为尾的子串的区间。
使用 unordered_map<char, int> hash来表示 字符出现的次数。
双指针扫描时来维护该区间[j, i],使得该区间为以 i 为底的,保证不重复的最大区间。
- 初始
[j, i]无重复,i往后走,将其加入哈希表 - 若加入后,
hash[s[i]] > 1说明i位置出现了和前面重复的字符,由于前面是不重复的,所以只有可能是i位置的字符重复,接下来,j开始后移,同时进行hash[s[j++]]--来j将哈希表前面的字符清零,直到找到一个新的j使的hash[s[i]] > 1不成立,即当前j的位置为与i重复字符的下一个字符,当前[j, i]为以 i为尾的最长子串。
画一个简图如下:

时间复杂度:每个点最多被i 和 j 各扫描一次,所以为 O(N)
¶AC代码:
1 | |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小牛博客!
评论





