小黑带领阿黄中老黑一起跑步完成了小怪兽,晚上一起吃烤肠西瓜,买了帐篷准备一起露营的leetcode之旅:438. 找到字符串中所有字母异位词

news2024/11/16 13:52:32

小黑代码

class Solution:
    def findAnagrams(self, s: str, p: str) -> List[int]:
        # 串p长度
        n_p = len(p)
        # 串s长度
        n_s = len(s)
        # 计数字典
        flags = collections.Counter(p)
        # 统计字典
        map_ = dict((k, 0) for k in p)
        # 匹配到的字符个数
        count = 0
        # 头尾指针
        left = right = 0
        # 目标数组
        results = []
        # 开始迭代
        while right < n_s:
            # 该字符不在目标串p中,则left和right都跳到它
            if s[right] not in p:
                right += 1
                left = right
                count = 0
                map_ = dict((k, 0) for k in p)
            # 该字符在目标串p中
            else:
                # 直到该字符的个数小于p中的个数
                while map_[s[right]] >= flags[s[right]]:
                    map_[s[left]] -= 1
                    count -= 1
                    left += 1
                # 将其加入map_
                map_[s[right]] += 1
                count += 1
                # 满足条件
                if count == n_p:
                    results.append(left)
                right += 1
        return results

在这里插入图片描述

滑动窗口法

class Solution:
    def findAnagrams(self, s: str, p: str) -> List[int]:
        # 两个字符串长度
        n_s = len(s)
        n_p = len(p)
        # 跳出
        if n_p > n_s:
            return []
        # 初始化计数数组
        flag_s = [0] * 26
        flag_p = [0] * 26
        # 结果数组
        results = []
        # 判断窗口初试位置是否成立
        for i in range(n_p):
            flag_s[ord(s[i])-97] += 1
            flag_p[ord(p[i])-97] += 1
        if flag_p == flag_s:
            results.append(0)
        # 开始滑动窗口
        for i in range(n_s-n_p):
            flag_s[ord(s[i+n_p])-97] += 1
            flag_s[ord(s[i])-97] -= 1
            # 判断是否符合条件
            if flag_p == flag_s:
                results.append(i+1)
        return results

在这里插入图片描述

优化后的滑动窗口

class Solution:
    def findAnagrams(self, s: str, p: str) -> List[int]:
        # 结果数组
        results = []
        # 两个字符串的长度
        n_s = len(s)
        n_p = len(p)
        # 非法情况
        if n_p > n_s:
            return results
        # 计数数组
        count = [0] * 26
        # 计算初始状态
        for i in range(n_p):
            count[ord(s[i])-97] += 1
            count[ord(p[i])-97] -= 1
        # 计算差值(计算不同的字符品种个数)
        diff = [t != 0 for t in count].count(True)
        # 判断初始条件是否符合要求
        if not diff:
            results.append(0)
        # 开始滑动窗口
        for i in range(n_s-n_p):
            # 判断s字符串中准备滑出的字符其差值
            # 如果为1,则表示滑出后,该字符数量在扔掉该字符的窗口内与字符串p中的该字符数量相同,差值减1
            if count[ord(s[i])-97] == 1:
                diff -= 1
            # 如果是0,则表示滑出后,该字符数量在扔掉该字符的窗口内与字符串p中的该字符数量相比,少1,增加了一个字符品种的差距,差值加1
            elif not count[ord(s[i])-97]:
                diff += 1
            count[ord(s[i])-97] -= 1
            # 判断s字符串中将要滑入的字符其差值
            # 如果为-1,则表示滑入后,该字符数量在加入该字符的窗口内与字符串p中的该字符数量相同,差值减1
            if count[ord(s[i+n_p])-97] == -1:
                diff -= 1
            # 如果为0,则表示滑入后,该字符数量在加入该字符的窗口内与字符串p中的该字符数量相比,多1,增加了一个字符品种的差距,差值加1
            elif not count[ord(s[i+n_p])-97]:
                diff += 1
            count[ord(s[i+n_p])-97] += 1
            # 判断是否符合要求
            if not diff:
                results.append(i+1)
        return results

在这里插入图片描述

小黑改编(优化版滑动窗口)

class Solution:
    def findAnagrams(self, s: str, p: str) -> List[int]:
        # 结果数组
        results = []
        # 两个字符串的长度
        n_s = len(s)
        n_p = len(p)
        # 非法情况
        if n_p > n_s:
            return results
        # 计数数组
        count = [0] * 26
        # 计算初始状态
        for i in range(n_p):
            count[ord(s[i])-97] += 1
            count[ord(p[i])-97] -= 1
        # 计算差值
        diff = sum([abs(t) for t in count])
        # 判断初始条件是否符合要求
        if not diff:
            results.append(0)
        # 开始滑动窗口
        for i in range(n_s-n_p):
            # 判断s字符串中准备滑出的字符其差值
            if count[ord(s[i])-97] > 0:
                diff -= 1
            elif count[ord(s[i])-97] <= 0:
                diff += 1
            count[ord(s[i])-97] -= 1
            # 判断s字符串中将要滑入的字符其差值
            if count[ord(s[i+n_p])-97] < 0:
                diff -= 1
            elif count[ord(s[i+n_p])-97] >= 0:
                diff += 1
            count[ord(s[i+n_p])-97] += 1
            # 判断是否符合要求
            if not diff:
                results.append(i+1)
        return results

在这里插入图片描述

小黑生活

学校的蓝天,有种诗和远方的感觉

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

翻翻两年前的聊天记录,笑死了

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

晚餐烤冷面+饺子

在这里插入图片描述
在这里插入图片描述

坐车回家,享受风景,回去练琴

在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

眼睛有些对了,继续观察

在这里插入图片描述

将这本书的最后部分读完,在最后的日子再借本新书看看

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述

晚餐吃个麻辣烫

在这里插入图片描述

突然想野营了,买个帐篷,小伙伴们约起来~

在这里插入图片描述

带领中老黑和阿黄去挑战小怪兽,带领大家一起快乐运动,挑战自己,尽管大家平时不怎么运动,很欣慰大家都坚持下来了

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

回宿舍烤肠西瓜约起来

在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

他们王者干到凌晨两点,我在刷题,可惜晚上失眠了

在这里插入图片描述

直接午餐牛肉面

在这里插入图片描述

我们仨一起骑车去按摩,中老黑体验新车去昌平十三陵

在这里插入图片描述
在这里插入图片描述

去迪卡侬体验帐篷

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

品尝网红肉蛋堡

在这里插入图片描述

准备晚上带小老黑也体验一把朝阳公园小怪兽,早日摆脱焦虑~

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

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

相关文章

Python给一个exe执行文件注册持续性的快捷键(热键)的代码实例

本篇文章主要讲解通过python给一个exe文件绑定一个快捷键、并取消快捷键(热键)的实操方法。 日期:2023年6月11日 作者:任聪聪 实现按下快捷键即可启动软件的效果说明 启动软件注册热键呼出其他软件或本体的效果说明: 演示材料说明:在download文件目录下存放一个可执行的…

数据结构与算法之美 | 栈

栈结构&#xff1a;后进者先出&#xff0c;先进者后出 栈是一种“操作受限”的线性表 当某个数据集合只涉及在一端插入和删除数据&#xff0c;并且满足后进先出、先进后出的特性&#xff0c;这时我们就应该首选“栈”这种数据结构 栈的实现 使用数组实现&#xff1a;顺序栈…

【数据结构】二叉树(一)

目录 一、树的概念及结构 1、树的概念 2、树的相关概念 3、树的表示 二、二叉树概念及结构 1、二叉树的概念 2、特殊二叉树 3、二叉树的性质 4、二叉树的存储结构 4.1 顺序存储结构 4.2 链式存储结构 三、二叉树顺序结构及实现 1、二叉树的顺序结构 2、堆的概念及结构 3、堆…

OMG--RTPS(Real Time Publish Subscribe Protocol)

OMG--RTPS&#xff08;Real Time Publish Subscribe Protocol&#xff09; 1 概述2 内容缩写DDS 有线协议的要求RTPS 有线协议The RTPS Platform Independent Model (PIM)The Structure ModuleThe Messages ModuleThe Behavior ModuleThe Discovery Module The RTPS Platform S…

Xuperchain多节点网络搭建+加节点+测试

环境准备 创建网络部署环境 # 在xuperchain目录执行 make testnet 种子节点 # 查看node1节点连接地址netURL cd node1 ./bin/xchain-cli netURL preview # 得到如下结果,实际使用时,需要将ip配置节点的真实ip,port配置成 /ip4/{{ip}}/tcp/{{port}}/p2p/Qmf2HeHe4sspGkfR…

深度学习应用篇-计算机视觉-OCR光学字符识别[7]:OCR综述、常用CRNN识别方法、DBNet、CTPN检测方法等、评估指标、应用场景

【深度学习入门到进阶】必看系列&#xff0c;含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等 专栏详细介绍&#xff1a;【深度学习入门到进阶】必看系列&#xff0c;含激活函数、优化策略、损失函数、模型调优、归一化…

上课补充的知识

题目 char类型的默认值是\u0000 数组的创建方式 数组的遍历 遍历:从头到尾,依次访问数组每一个位置,获取每一个位置的元素.形式如下: 我们通过数组的下标操作数组,所以for循环变量操作的也是数组下标 开始:开始下标0 结束:结束下标length-1 如何变化: 语法&#xff1a; for…

大学结束啦!!!

前言&#xff1a;相信看到这篇文章的小伙伴都或多或少有一些编程基础&#xff0c;懂得一些linux的基本命令了吧&#xff0c;本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python&#xff1a;一种编程语言&…

神舟笔记本“性能、娱乐、省电、安静”模式之间的区别

前言&#xff1a;主要是对比神舟笔记本电脑“性能、娱乐、省电、安静”模式之间的区别 工具及硬件 名称版本号电脑Z8D6 2.5k屏鲁大师6.1023.xxx 之所以使用鲁大师&#xff0c;主要是为了节省时间.另外仅仅只是为了做横向对比&#xff0c;不需要太专业的工具。 实验中有两个变…

六级备考6天|CET-6|听力第一二三四讲|复习回顾|长对话篇章|14:00~16:30

长对话 篇章 目录 听写笔记 练习讲义 听写笔记 1. 听力策略 听前&#xff1a;读题——分析文章——预测题目 听中&#xff1a;划出听到的内容——对应程度高为正确选项 听后&#xff1a;不听题目——往下读题 2. 重点词汇 proofread / ˈpruːfriːd / …

CodeWhisperer插件使用体验

官方教程点击跳转 使用工具 1.vscode 2.插件(AWS Toolkit),免费使用 安装以后如何使用 1.首先要有一个aws账号 2.插件下载好以后登录aws账号&#xff0c;我们主要用这款插件的CodeWhisperer这个功能&#xff0c;其它的自行看官方教程了解。 注意事项&#xff1a;我们在从vs…

杭州互联网医疗Java实习一面

目录 1.java集合知道哪些2.ArrayList和LinkedList插入效率对比3.HashMap的底层结构4.HashMap怎么实现线程安全4.介绍下reentrantlock5.Redis分布式锁的实现原理7.知道哪些排序算法8.快排的原理9.Spring的AOP作用和原理10.MySQL的InnoDB索引结构11.网络中TCP和UDP的区别12.JVM的…

delphi 调用youtube-dl命令,下载youtube视频,原理及源代码

一、概要 1、Youtube-dl工具 强大的视频下载命令行工具Youtube-dl项目由Ricardo Garcia创建于2008年&#xff0c;源代码由Python编写&#xff0c;托管在GitHub上&#xff0c; 最初仅支持YouTube&#xff0c;但随着项目的发展&#xff0c;也开始支持其他视频网站&#xff0c;优势…

如何优化selenium webdriver的执行速度

目录 前言 在page_source中断言text比直接使用text属性断言要快 元素越具体&#xff0c;获取text的速度越快 使用变量去缓存没有变化的元素 快速在文本框中输入大文本 使用动态等待进行动态/AJAX 操作而不是固定睡眠 最后 前言 让自动化测试脚本正常工作只是自动化测试的…

微信小程序的自动化测试框架Minium详解,10分钟掌握

目录 前言 minium 是为小程序专门开发的自动化框架 文档使用 框架依赖运行环境部署 使用 打开工具 特别说明&#xff1a; 总结&#xff1a; 前言 微信发布了小程序的自动化测试框架Minium&#xff0c;提供了多种运行验证方式&#xff0c;其特点&#xff1a; 支持一套脚…

Alloy Tutorial(2)LastPass; cacheMemory

文章目录 LastPass整体 solution 代码&#xff1a; cacheMemory LastPass module LastPass/** LastPass password map** A simple example to explain basics of Alloy. ** The PassBook keeps track of a set of users passwords for a set of URLs. * For each User/URL pai…

【阿里云】第一次进行域名注册、备案以及使用全过程

前言 随着ChatGPT的爆火&#xff0c;让我直面感受到了一项技术的突破可以产生堪比原子弹爆炸的威力&#xff0c;因而在品尝过ChatGPT带来的便利与甜头后&#xff0c;就一直在跟进&#xff0c;同时也在能力范围内&#xff0c;让数十位朋友使用上了ChatGPT 前段时间&#xff0c…

ftrace学习 —— user_events的用法

参考 https://docs.kernel.org/trace/user_events.html 测试程序 samples/user_events/example.c tools/testing/selftests/user_events/ftrace_test.c 正文 通过user_event可以实现对应用程序的跟踪&#xff0c;类似linux内核中的tracepoint那样。相似的方法还有借助/sys…

走进docker

一、Docker 概述 1、Docker的概念 • Docker是一个开源的应用容器引擎&#xff0c;基于go语言开发并遵循了apache2.0协议开源 • Docker是在Linux容器里运行应用的开源工具&#xff0c;是一种轻量级的“虚拟机” • Docker 的容器技术可以在一台主机上轻松为任何应用创建一…

异常数据检测 | Python实现基于高斯概率分布的异常数据检测

文章目录 文章概述模型描述源码分享学习小结参考资料文章概述 高斯分布也称为正态分布。它可以被用来进行异常值检测,不过我们首先要假设我们的数据是正态分布的。不过这个假设不能适应于所有数据集。但如果我们做了这种假设那么它将会有一种有效的方法来发现异常值。 模型描述…