C++解决《无重复字符的最长子串》问题(滑动窗口(unordered_set),string)
No.3《无重复字符的最长子串》;题型:滑动窗口(unordered_set),string
- 题目
- 题解思路(动态规划)
- 题解代码
题目
题解思路(动态规划)
- 申请一个
unordered_set<char> lookup
,作为滑动窗口,用来存放临时子串; - 从第一个字符开始,对题目字符串进行一轮遍历,每轮循环中,依次将一个字符加入窗口并做以下判断::
(1)若在窗口子串中找到该字符,说明新的窗口子串不符合条件,则将窗口最左端元素移出,将新字符加入窗口中后,继续向下遍历;
(2)若窗口子串中没有该字符,将该字符加入窗口中,继续向下遍历,同时更新最长子串长度; - 全部遍历后,返回最长子串长度。
题解代码
class Solution {public:int lengthOfLongestSubstring(string s) {if(s.size() == 0) return 0;unordered_set<char> lookup; //无序集合,用于存放临时子串int ans = 0;int left = 0;for(int i = 0; i < s.size(); i++){ //滑动窗口,窗口右端每次向右移动一个字符while (lookup.find(s[i]) != lookup.end()){ //若在子串中找到该字符lookup.erase(s[left]); //此子串不符合条件,窗口最左端元素移出left ++;}ans = max(ans,i-left+1); //存放最长有效子串的长度lookup.insert(s[i]);}return ans; }
};
时间复杂度:O(n)
空间复杂度:O(n)
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/daily-temperatures
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
C++解决《无重复字符的最长子串》问题(滑动窗口(unordered_set),string)相关推荐
- 【LeetCode】无重复字符的最长子串【滑动窗口法】
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc&qu ...
- LeetCode 3. 无重复字符的最长子串(滑动窗口+哈希)
1. 题目 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 " ...
- 无重复字符的最长子串_滑动窗口
思路: 这道题主要用到思路是:滑动窗口. 其实就是一个队列,比如例题中的 abcabcbb,进入这个队列(窗口)为 abc 满足题目要求,当再进入 a,队列变成了 abca,这时候不满足要求.所以,我 ...
- 10.无重复字符的最长子串---使用滑动窗口方法和哈希表来解决
一.解题方法:滑动窗口 1.本题可以使用双层for循环暴力破解,但是时间复杂度很高,会达到O(n^2),所以采用滑动窗口的方法来降低时间复杂度. 2.定义一个HashMap数据集合,其中key值为字符 ...
- 利用滑动窗口法解决无重复字符的最长子串
无重复字符的最长子串 题目描述: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最 ...
- [剑指offer]面试题第[48]题[Leetcode][JAVA][第3题][无重复字符的最长字串][滑动窗口][HashSet/Map]
[问题描述][第3题][无重复字符的最长字串] 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度.示例 1:输入: "abcabcbb" 输出: 3 解释: 因为无重 ...
- LeetCode 3.无重复字符的最长字串(滑动窗口)
题目描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "a ...
- leetcode 395. 至少有 K 个重复字符的最长子串(滑动窗口)
给你一个字符串 s 和一个整数 k ,请你找出 s 中的最长子串, 要求该子串中的每一字符出现次数都不少于 k .返回这一子串的长度. 示例 1: 输入:s = "aaabb", ...
- c++ 数组的输入遇到特定字符停止输入_滑动窗口思维--挑战“无重复字符的最长子串”
文章来源: 饭饭的Python学习之路 作者: 一粒米饭 今天要挑战的是"无重复字符的最长子串". 难度:中等 题目描述: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 ...
- Leetcode刷题100天—3. 无重复字符的最长子串(滑动窗口+集合+双指针)—day21
前言: 作者:神的孩子在歌唱 大家好,我叫运智 3. 无重复字符的最长子串 难度中等6009收藏分享切换为英文接收动态反馈 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度. 示例 ...
最新文章
- Lecture 0 --基本说明
- WPF的图片操作效果(一):RenderTransform
- MongoDb Windows linux平台环境及主流编程语言驱动安装同时配置mongoDb的远程连接
- android 小知识点
- 【LeetCode】LC1408:一维数组的动态和
- fastjson对json操作
- SPOJ.TLE - Time Limit Exceeded(DP 高维前缀和)
- HTML4和HTML5的区别[转]
- Silverlight学习笔记(3):Silverlight的界面布局
- 【H.264/AVC视频编解码技术】第六章【指数哥伦布编码】
- IronPython资料
- 源码分析Thread
- 猴子选大王 java,PAT-JAVA-5-28 猴子选大王 (20分)
- ilitek win10 触摸屏驱动_想做多大尺寸触摸框找融创方圆定制触摸屏工厂
- 组合数学 —— 容斥定理
- 【JAVA 第三章 流程控制语句】课后习题 找零钱
- bzoj3442学习小组
- 多头借贷数据在风控中如何分析及应用
- JAVA的MySQL字符串拼接_MySQL字符串拼接、截取
- 关于.net dll文件反编译