知识储备--基础算法篇-滑动窗口

1.滑动窗口

1.1第3题-无重复字符的最长子串

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:

输入: s = "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

心得:用哈希表来一点点遍历,但是因为哈希表占内存,我又是两个循环遍历,所以速度又慢,占的内存还多。 

class Solution(object):def lengthOfLongestSubstring(self, s):""":type s: str:rtype: int"""if len(s)==0:return 0max_ = 1for i in range(len(s)):hash_table = {}max_temp = 0for j in range(i,len(s)):if s[j] not in hash_table:hash_table[s[j]] = 1max_temp += 1if max_ < max_temp:max_ = max_tempelse:breakreturn max_

看了解析,我的整体思路差不多,不过他用了滑动窗口,计算量少了很多 ,而且一开始没有理解left的含义,left是用来从窗口的左边开始删除元素,直到哈希表中没有相同的元素为止。还有就是用set()不要用{},set需要使用add和remove。

class Solution(object):def lengthOfLongestSubstring(self, s):""":type s: str:rtype: int"""if len(s)==0:return 0max_len = 0hash_table = set()cur_len = 0left = 0for j in range(len(s)):cur_len += 1while s[j] in hash_table:hash_table.remove(s[left])left += 1cur_len -= 1if max_len < cur_len:max_len = cur_lenhash_table.add(s[j])return max_len

1.2第438题-找到字符串中所有字符异位词

给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。

异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。

示例 1:

输入: s = "cbaebabacd", p = "abc"
输出: [0,6]
解释:
起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。
起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。

心得:思路很简单,早早的就想出来了,但是关于滑动窗口与给定字符串相等的逻辑却想了半天,最终决定用字典来记录,重复出现的字符就对字典中该字符的值加一,滑动的时候删除或减一。字典删除的操作使用del。

参考答案中是用数组来存储每个字母的个数

class Solution(object):def findAnagrams(self, s, p):""":type s: str:type p: str:rtype: List[int]"""if len(s) < len(p):return []elif s == p:return [0]target_dict = {}n = len(p)for i in range(n):if p[i] not in target_dict:target_dict[p[i]] = 1else:target_dict[p[i]] = target_dict[p[i]] + 1result = []result_dict = {}for i in range(n-1):if s[i] not in result_dict:result_dict[s[i]] = 1else:result_dict[s[i]] = result_dict[s[i]] + 1for i in range(len(s)-n+1):if s[i+n-1] not in result_dict:result_dict[s[i+n-1]] = 1else:result_dict[s[i+n-1]] = result_dict[s[i+n-1]] + 1if result_dict == target_dict:result.append(i)if result_dict[s[i]] == 1:del result_dict[s[i]]else:result_dict[s[i]] = result_dict[s[i]] - 1return result

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/98026.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS 安装Docker

Docker官网 Install Docker Engine on CentOS | Docker Docs 1.查看系统版本&#xff0c;Docker支持CentOS 7及以上版本 cat /etc/redhat-release2.卸载旧版本 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-l…

OPPO手机便签数据搬家到华为mate60Pro手机怎么操作

今年8月底&#xff0c;华为上线了本年度的旗舰手机——华为mate60Pro。有不少网友都在抢购这台手机&#xff0c;不过在拿到新手机之后&#xff0c;还有一件重要的事情要做&#xff0c;这就是把旧手机中比较重要的数据&#xff0c;例如图片、短信、通讯录、联系人、便签等数据搬…

Agisoft Metashape相机标定笔记

Lens Calibration(镜头标定) 使用Metashape进行自动相机标定是可能的。Metashape使用LCD显示屏作为标定目标&#xff08;可选&#xff1a;使用打印的棋盘格图案&#xff0c;但需保证它是平坦的且单元格是正方形&#xff09;。 相机标定步骤支持全相机标定矩阵的估计&#xff…

C# 采用3DES-MAC进行签名 base64解码与编码

** 3DES-MAC ** 3DES-MAC&#xff08;Triple Data Encryption Standard Message Authentication Code&#xff09;是一种消息认证码&#xff08;MAC&#xff09;算法&#xff0c;用于验证消息的完整性和真实性。3DES-MAC使用了3DES&#xff08;Triple Data Encryption Standa…

elasticsearch分析插件 安装analysis-ik

首先下载安装es 和 插件 &#xff0c;注意 两者的版本要保持一致,如果要用到kibana 则三者保持一致 ik&#xff1a;https://github.com/medcl/elasticsearch-analysis-ik/releases es/kibana&#xff1a;https://www.elastic.co/cn/downloads/past-releases/ 然后在 es— elast…

OpenCV:实现图像的负片

负片 负片是摄影中会经常接触到的一个词语&#xff0c;在最早的胶卷照片冲印中是指经曝光和显影加工后得到的影像。负片操作在很多图像处理软件中也叫反色&#xff0c;其明暗与原图像相反&#xff0c;其色彩则为原图像的补色。例如&#xff0c;颜色值A与颜色值B互为补色&#…

网站edge -- 油猴 -> IDM

一、百度网盘限速 未解决 软件&#xff1a;IDM 安装路径&#xff1a; 1.1如果&#xff1a;edge 出问题打不开其他网站&#xff0c; 解决方法&#xff1a; 以管理员的身份&#xff0c;右击载这个软件&#xff0c;就好了 1.2使用这个软件 应该是右击这个软件 以管理员的身…

JVM详细教程

JVM 前言 还在完善中先发布 JVM虚拟机厂家多钟多样&#xff0c;具体实现细节可能不一样&#xff0c;这里主要讲的是虚拟机的规范&#xff0c;以下内容融合了各个平台发布的内容和周志明老师的《深入理解java虚拟机》 JVM概述 如何理解jvm跨平台&#xff1f; 编译成汇编代码…

华为---OSPF协议优先级、开销(cost)、定时器简介及示例配置

OSPF协议优先级、开销、定时器简介及示例配置 路由协议优先级&#xff1a;由于路由器上可能同时运行多种动态路由协议&#xff0c;就存在各个路由协议之间路由信息共享和选择的问题。系统为每一种路由协议设置了不同的默认优先级&#xff0c;当在不同协议中发现同一条路由时&am…

Git 回顾小结

Git是一个免费开源&#xff0c;分布式的代码版本控制系统&#xff0c;版主开发团队维护代码 作用&#xff1a;记录代码内容&#xff0c;切换代码版本&#xff0c;多人开发时高校合并代码内容 Git常用命令 命令作用注意git -v查看Git版本git init初始化本地Git仓库git add 文件…

IDEA搜索指定某个类的方法的引用位置

搜索方法引用位置的时候&#xff0c;如果该方法是接口定义出来的&#xff0c;则结果里会包含其他实现类的该方法的引用位置&#xff0c;但是像Object定义的Equals方法这种&#xff0c;搜索出来的结果是超级多的&#xff0c;根据没法看&#xff0c;因此想要只看该类的方法引用位…

【Eclipse】Project interpreter not specified 新建项目时,错误提示,已解决

目录 0.环境 1&#xff09;问题截图&#xff1a; 2&#xff09;错误发生原因&#xff1a; 1.解决思路 2.具体步骤 0.环境 windows 11 64位&#xff0c;Eclipse 2021-06 1&#xff09;问题截图&#xff1a; 2&#xff09;错误发生原因&#xff1a; 由于我手欠&#xff0c;将…