LeetCode Medium|【3. 无重复字符的最长子串】
创始人
2024-11-11 21:34:30
0

力扣题目链接
状态:在本题中,我们可以很明显得看出出现了关键字:子串、最长,所以我们肯定是选用滑动窗口来解决这个题目。
滑动窗口首先要解决的就是我们选择什么样的容器来存储数据呢?本体中是计算重复字符,我们可以使用 set、map、数组均可以解决,这里分别给出三种方法。

set

这个非常直观,和我们做的一些滑动窗口的基础题是一样的

class Solution { public:     int lengthOfLongestSubstring(string s) {         std::unordered_set set;         int left = 0, right = 0;         int ans = 0;          while (right < s.length()) {             char rChar = s[right];             while (set.find(rChar) != set.end()) {                 set.erase(s[left]);                 left++;             }             set.insert(rChar);             ans = max(ans, right - left + 1);             right++;         }          return ans;     } }; 

map

对于 map ,我们最需要搞清楚的就是 key 和 value ,这里我们的 key 肯定是字符,然后 value 肯定是对应的下标,因为我们的 map 只能去搜索 key。

这样的话我们就不需要内层循环了,可以直接更新 left 。如何更新呢?当然就是把重复字符排除在外,但是为了防止 left 的回退,所以我们有:

left = max(left, map[rChar] + 1); 

这样的代码。

class Solution { public:     int lengthOfLongestSubstring(string s) {         std::unordered_map map;         int left = 0, right = 0;         int ans = 0;          while (right < s.length()) {             char rChar = s[right];             if (map.find(rChar) != map.end()) {                 left = max(left, map[rChar] + 1);             }             map[rChar] = right;             ans = max(ans, right - left + 1);             right++;         }          return ans;     } }; 

数组

对于数组,解法和 map 其实非常类似。
我们第一反应肯定就是 26 个英文字母,但是由于我们题目中要求了 「s由英文、数字、符号和空格组成」,所以很自然的想法就是 255 来表示 ASCII 码。

同样的,我们在数组中存储的是对应的下标位置。

class Solution { public:     int lengthOfLongestSubstring(string s) {         vector index(256, -1);         int left = 0, right = 0;         int ans = 0;          while (right < s.length()) {             char rChar = s[right];             if (index[rChar] != -1 && index[rChar] >= left) {                 left = max(left, index[rChar] + 1);             }             index[rChar] = right; //还是隐式类型转换             ans = max(ans, right - left + 1);             right++;         }          return ans;     } }; 

相关内容

热门资讯

五分钟黑科技!aapoker插... 五分钟黑科技!aapoker插件(透明挂黑科技)外挂透明挂辅助下载(2024已更新)(哔哩哔哩)是一...
七分钟指导!德扑之星记牌器(透... 七分钟指导!德扑之星记牌器(透明挂黑科技)外挂透明挂辅助机器人(2020已更新)(哔哩哔哩);德扑之...
4分钟私人局!德扑之星怎么在电... 4分钟私人局!德扑之星怎么在电脑上玩(透明挂黑科技)外挂透明挂辅助安装(2026已更新)(哔哩哔哩)...
六分钟指导!红龙扑克发牌有问题... 六分钟指导!红龙扑克发牌有问题(透明挂黑科技)外挂透明挂辅助智能(2020已更新)(哔哩哔哩);红龙...
五分钟了解!aapoker透明... 五分钟了解!aapoker透明挂是真的吗(透明挂黑科技)外挂透明挂辅助机器人(2025已更新)(哔哩...
8分钟黑科技!AApoker辅... 8分钟黑科技!AApoker辅助工具(透明挂黑科技)外挂透明挂辅助机器人(2020已更新)(哔哩哔哩...
7分钟体悟!wepoke计算辅... 7分钟体悟!wepoke计算辅助(透明挂黑科技)外挂透明挂辅助神器(2020已更新)(哔哩哔哩)相信...
九分钟透视!wpk ai辅助(... 九分钟透视!wpk ai辅助(透明挂黑科技)外挂透明挂辅助智能(2020已更新)(哔哩哔哩);是一款...
七分钟科普!智星德州辅助器(透... 七分钟科普!智星德州辅助器(透明挂黑科技)外挂透明挂辅助神器(2023已更新)(哔哩哔哩)是一款可以...
两分钟普及!wepoke辅助多... 两分钟普及!wepoke辅助多久会检测到(透明挂黑科技)外挂透明挂辅助软件(2022已更新)(哔哩哔...