力扣3. 无重复字符的最长子串 two pointer算法|滑动窗口|尺取法
- 无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:
输入: “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:
输入: “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。
题解:
朴素解法当然是考虑n^2算法,就是枚举两个端点,选出最优解
是否可以优化?
比如abcabcbb串中
abcabcbb
abc
bca
由abc直接跳到bca而不再暴力搜索 b,bc,是因为我们在abc这里就已经知道bc是符合条件的字串,只是由于a与新字符不满足条件所以我们要拿掉a,防止重复考虑剩下的满足条件的字符串,最终得到解.
所以高效一点的解法就是用两个指针分别指向满足条件的左端和右端,若是满足条件就让右指针++前进,不满足条件,就让左指针++前进到满足条件的位置继续搜索,这个算法就是twopointer算法,也可以叫滑动窗口算法,因为这个算法left和right两个指针走一遍序列就可以搜出最优解,所以是O(n).
这个算法可以巧妙地避免中间已经比较过的序列,减少二次比较从而优化算法效率.
我们可以保存一个当前子串中的字符的位置,如果这个字符之前遇到过,我们就让left前进到这个之前遇到过的位置的后一个元素,让后++的过程把这些字符都从我们的保存位置表中删掉.这样就能减少重复比较,没必要让left+1后再进行条件判断.
class Solution {public:map<char,int>bok;int lengthOfLongestSubstring(string s) {int left = 0,right = -1,maxlen=0;while(1){right++;if(right==s.length()){maxlen = max(maxlen,right-left);break;}if(bok.count(s[right])==0){bok[s[right]]=right;}else {maxlen = max(maxlen,right-left);int start = left;left = bok[s[right]]+1;while(start<left)bok.erase(s[start++]);bok[s[right]] = right;}}return maxlen;}
};
力扣3. 无重复字符的最长子串 two pointer算法|滑动窗口|尺取法相关推荐
- C++解决《无重复字符的最长子串》问题(滑动窗口(unordered_set),string)
No.3<无重复字符的最长子串>:题型:滑动窗口(unordered_set),string 题目 题解思路(动态规划) 题解代码 题目 题解思路(动态规划) 申请一个unordered_ ...
- 【LeetCode笔记】3. 无重复字符的最长子串(JAVA、滑动窗口、字符串)
文章目录 题目描述 思路 && 代码 1. 之前的版本 更新 2.0 题目描述 子串:各字符间必须要相邻,而非子序列 使用滑动窗口来做就行 思路 && 代码 1. 之前 ...
- php无重复字符的最长子串,PHP算法之无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc&qu ...
- 力扣-无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 " ...
- 【leetcode】力扣刷题(3):无重复字符的最长子串(go语言)
一.问题描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 " ...
- 力扣——无重复字符的最长子串
无重复字符的最长子串 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的 ...
- 【LeetCode】无重复字符的最长子串【滑动窗口法】
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc&qu ...
- LeetCode 3. 无重复字符的最长子串(滑动窗口+哈希)
1. 题目 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 " ...
- 最长重复子串_3. 无重复字符的最长子串
3. 无重复字符的最长子串 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串 ...
最新文章
- laravel5 MAC is invalid
- 图灵赠书——程序员12月书讯
- Linux虚拟地址空间布局
- 【杂谈】一个五岁孩子妈妈在有三AI学习并且赚钱的故事
- ubuntu中的fi语法_Shell脚本语法--if/then/elif/else/fi
- Spotify模式并非“敏捷涅磐”
- jcmd_jcmd,大约JDK 11
- matlab在电磁场与电磁波中的应用,matlab在电磁场与电磁波学习中的应用.docx
- windows media services 2008外网无法访问
- win10系统崩溃怎么修复_系统崩溃怎么重装系统图文教程
- Linux常用的服务器构建
- python中一个对象只能被一个变量引用吗_Python中for循环里的变量无法被引用的解决方法...
- 51nod1010----只包含因子2 3 5的数
- Physics Bodies(中文翻译)—UE4官方文档
- 车牌OCR识别SDK
- 使用usb有线网卡u-boot无法ping通虚拟机
- 重头戏!ZeroMQ的发布-订阅模式详解:ZMQ_PUB、ZMQ_SUB
- 街篮中服务器维修什么时候能结束,街头篮球手游1月6日微信iOS维护公告 服务器扩容...
- 40 岁的时候,我转行成为一名前端开发者!
- 【滤波】概率、高斯和贝叶斯
热门文章
- 部署OpenStack问题汇总(五)--openstack中删除虚拟主机,状态一直未deleting
- 6月26号.NET面试题(程序题部分)只要做懂这3道题肯定能脱离菜鸟称号!
- 几种比较好看的滚动条样式及代码
- 【原】UIView实现点击着重效果的解决方案
- 编程实现背包的递归和非递归两种解法_算法动态规划(七)背包问题4
- android开机自动打开微信小程序,Android APP拉起小程序界面 (微信未启动 打不开)...
- ngix莫名挂掉 signal process started
- 微信 wx.chooseImage 上传图片 的思考
- java中字节流的选择,求助,java中怎么用字节流读写汉字
- P91--商品保存debug完成