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

news2024/12/25 0:46:10

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 0
        max_ = 1
        for i in range(len(s)):
            hash_table = {}
            max_temp = 0
            for j in range(i,len(s)):
                if s[j] not in hash_table:
                    hash_table[s[j]] = 1
                    max_temp += 1
                    if max_ < max_temp:
                        max_ = max_temp
                else:
                    break
        return max_

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

class Solution(object):
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        if len(s)==0:
            return 0
        max_len = 0
        hash_table = set()
        cur_len = 0
        left = 0
        for j in range(len(s)):
            cur_len += 1
            while s[j] in hash_table:
                hash_table.remove(s[left])
                left += 1
                cur_len -= 1
            if max_len < cur_len:
                max_len = cur_len
            hash_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]] = 1
            else:
                target_dict[p[i]] = target_dict[p[i]] + 1
        result = []
        result_dict = {}
        for i in range(n-1):
            if s[i] not in result_dict:
                result_dict[s[i]] = 1
            else:
                result_dict[s[i]] = result_dict[s[i]] + 1
        for i in range(len(s)-n+1):
            if s[i+n-1] not in result_dict:
                result_dict[s[i+n-1]] = 1
            else:
                result_dict[s[i+n-1]] = result_dict[s[i+n-1]] + 1
            if 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]] - 1
        
        return result

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年海运行业研究报告

第一章 行业概况 1.1 定义 海运行业&#xff0c;按照全球行业分类标准&#xff08;GICS&#xff09;的定义&#xff0c;是交通运输行业的一个重要子集。这个行业包括那些提供以海洋为主要运输途径的货物和乘客运输服务的公司。这些公司可以运营各种类型的船只&#xff0c;包括…

购物商场项目实践

1.项目开始 1&#xff09;此项目为在线电商项目 2&#xff09;包含首页&#xff0c;搜索列表&#xff0c;商品详情&#xff0c;购物车&#xff0c;订单&#xff0c;支付&#xff0c;用户登录/注册等多个子模块 3&#xff09;使用Vue全家桶ES6webpackAxios等前端技术 4&…

IDea寻找冲突的依赖包

场景&#xff1a;boot项目运行时&#xff0c;提示log4j2依赖包冲突。 SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/D:/maven/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/org/slf4j/impl/Stati…

Web安全测试(五):XSS攻击—存储式XSS漏洞

一、前言 结合内部资料&#xff0c;与安全渗透部门同事合力整理的安全测试相关资料教程&#xff0c;全方位涵盖电商、支付、金融、网络、数据库等领域的安全测试&#xff0c;覆盖Web、APP、中间件、内外网、Linux、Windows多个平台。学完后一定能成为安全大佬&#xff01; 全部…

RHCA之路---EX280(5)

RHCA之路—EX280(5) 1. 题目 Using the example files from the wordpress directory under http://materials.example.com/exam280/wordpress create a WordPress application in the farm project For permanent storage use the NFS shares /exports/wordpress and /export…

蓝桥杯打卡Day1

文章目录 全排列八皇后 一、全排列IO链接 本题思路:本题是一道经典的全排列问题&#xff0c;深度优先搜索即可解决。 #include <bits/stdc.h>constexpr int N10;std::string s; std::string ans; int n; bool st[N];void dfs(int u) {if(un){std::cout<<ans<…

java 基础面试题 静态绑定与动态绑定

一 静态绑定与动态绑定 1.1 前言概述 昨天去用友面试&#xff0c;被问到了如下几个问题 1.单例模式使用场景 2.责任链模式 3.分布式事务TCC 4.动态绑定和静态绑定 5.类加载器 今天就来研究一下静态绑定和动态绑定 1.2 静态绑定代码 1.父类&#xff1a;定义一个stati…

OpenCV实现Photoshop曲线调整

《QT 插件化图像算法研究平台》有仿Photoshop曲线调整图像的功能&#xff0c;包括RGB曲线调整和HSV曲线调整。 Photoshop曲线调整原理&#xff1a;RGB、HSV各通道曲线&#xff0c;可以理解为一个值映射&#xff08;值转换&#xff09;函数。X轴是输入&#xff0c;Y轴是输出。x0…

什么是SpringCloud Eureka服务注册与发现

&#x1f600;前言 本篇博文是关于SpringCloud Eureka 介绍&#xff0c;希望你能够喜欢 &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满意是我的动力&…

包管理工具--》npm的配置及使用(一)

目录 &#x1f31f;概念 &#x1f31f;背景 &#x1f31f;前端包管理器 &#x1f31f;包的安装 本地安装 全局安装 &#x1f31f;包配置 配置文件 保存依赖关系 &#x1f31f;包的使用 &#x1f31f;概念 模块&#xff08;module&#xff09; 通常以单个文件形式存…

解决windows下git操作提示用户名密码错误的问题

当代码从一个平台切换到另一个平台的时候&#xff0c;需要做两步操作&#xff0c;第一步就是更新git的仓库地址&#xff0c;在项目的.git/config文件里面修改&#xff0c;这一步做完之后&#xff0c;就可以推送代码到新的仓库了&#xff0c;这里就是重点来了。 一般第一次推动代…

数据结构与算法复杂度介绍

目录 一、基本概念 二、时间复杂度 【2.1】时间复杂度概念 【2.2】大O的渐进表示法 【2.3】举例时间复杂度计算 三、空间复杂度 一、基本概念 数据结构&#xff1a;相互之间存在一种或者多种特定关系的数据元素的集合。在逻辑上可以分为线性结构&#xff0c;散列结构、树…

关于 ignore

当使用 insert into xxx 时&#xff0c;可能出现因数据类型错误插入失败的情况&#xff0c;如图所示&#xff1a; 当出现这种情况时&#xff0c;可以通过 ignore 来“强制”插入&#xff0c;提示插入成功 但是这种操作会带来隐患如图&#xff1a; 时间有问题&#xff0c;但是时…

SMU200A/罗德与施瓦茨SMU200A信号发生器

181/2461/8938产品概述 R&S SMU200A信号发生器旨在满足现代通信系统研发及其生产中遇到的所有要求。R&S SMU200A矢量信号发生器不仅将多达两个独立的信号发生器组合在一个只有四个高度单位的机柜中&#xff0c;还提供无与伦比的RF和基带特性。 Rohde & Schwarz S…

如何让Android平台像网络摄像机一样实现GB28181前端设备接入?

技术背景 好多开发者在做国标对接的时候&#xff0c;首先想到的是IPC&#xff08;网络摄像头&#xff09;&#xff0c;通过参数化配置&#xff0c;接入到国标平台&#xff0c;实现媒体数据的按需查看等操作。 像执法记录仪等智能终端&#xff0c;跑在Android平台&#xff0c;…

mysql主从同步步骤(一主一从)

1、主库添加binlog配置&#xff0c;并设置server-id server-id124 # 设置日志格式,日志路径(注意路经需要mysql用户有权限写&#xff0c;默认地址放在datadir的目录下) binlog_formatmixed log-binmysql-bin# 设置binlog清理时间(秒), binlog每个日志文件大小 binlog_expire_l…

线上问诊:数仓开发(三)

系列文章目录 线上问诊&#xff1a;业务数据采集 线上问诊&#xff1a;数仓数据同步 线上问诊&#xff1a;数仓开发(一) 线上问诊&#xff1a;数仓开发(二) 线上问诊&#xff1a;数仓开发(三) 文章目录 系列文章目录前言一、ADS1.交易主题1.交易综合统计2.各医院交易统计3.各性…

行业追踪,2023-09-04

自动复盘 2023-09-04 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…

实时操作系统Freertos开坑学习笔记:(四):临界段保护、列表与列表项

前言 废话不多说&#xff0c;直接看主要要探究的问题&#xff1a; 一、临界段代码保护 1.什么是临界段&#xff1f; 图里面说&#xff0c;临界区的代码是不能被打断的&#xff0c;它运行时不能被中断打断&#xff0c;也不能由于非阻塞任务延时而切换到其他任务去。 比如说…

【Java转Go】Go中使用WebSocket实现聊天室(私聊+群聊)

目录 前言功能效果&#xff08;一人分饰多角.jpg&#x1f60e;&#xff09;用户上线、群聊私聊和留言下线 实现思路代码服务端 chat.go 完整代码客户端 html 完整代码 最后 前言 之前在Java中&#xff0c;用 springbootwebsocket 实现了一个聊天室&#xff1a;springbootwebso…