【Leetcode】438. 找到字符串中所有字母异位词

2024-01-09

【Leetcode】438. 找到字符串中所有字母异位词

题目链接

【Leetcode】438. 找到字符串中所有字母异位词

代码

func findAnagrams(s string, p string) []int {
	// 枚举p串,统计p串字符出现的次数
	cnt := map[byte]int{}
	for idx := range p {
		cnt[p[idx]]++
	}

	// 记录p串中总共有多少种字符
	total := len(cnt)
	// s串和p串的字符串长度
	lenS, lenP := len(s), len(p)

	i, j := 0, 0
	// 统计满足刚好相等的字符的种类数
	ans := []int{}
	// 统计当前窗口内符合字符串种类数跟个数都符合的字符种数
	time := 0
	// 枚举s串
	for j < lenS {
		// 新字符s[j]放入窗口中,cnt中该字符的个数-1
		cnt[s[j]]--
		// 如果新字符放入窗口之后,cnt中该字符的个数为-1,说明符合条件的字符种数要-1,新字符放入窗口之前,是符合条件的
		if cnt[s[j]] == -1 {
			time--
		} else if cnt[s[j]] == 0 {
			// 如果新字符放入窗口之后,cnt中该字符的个数为0,说明符合条件的字符种类数要+1,新字符放入窗口之后,刚好符合条件
			time++
		}
		// 如果窗口中的字符串长度 > p串长度,则
		if j-i+1 > lenP {
			// 把窗口左边界的字符移出窗口
			cnt[s[i]]++
			// 如果左边界字符移出窗口之后, cnt中该字符的个数为0,说明这个字符移出窗口之后,是符合条件的
			if cnt[s[i]] == 0 {
				time++
			} else if cnt[s[i]] == 1 {
				// 如果左边界字符移出窗口之后,cnt中该字符的个数为1,说明该字符移出窗口之前,是刚好符合条件的
				time--
			}
			i++// 窗口左边界右移
		}
		j++// 窗口右边界右移动
		// 如果此时窗口内的字符串刚好符合条件,则把左边界的下标放入结果数组
		if time == total {
			ans = append(ans, i)
		}
	}
	return ans
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Leetcode】438. 找到字符串中所有字母异位词 的相关文章

随机推荐

  • Jmeter 性能压测-常遇问题与解决技巧

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 2k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • NVIDIA Jetson环境VSCode安装记录,前期失败问题在于英伟达使用的是arm64架构

    1 安装失败及原因探索 1 1 报错 Unable to install code The following packages have unmet dependencies 搜索一个链接就开始上手 Ubuntu 22 04安装Visua
  • 软件测试开发/全日制/测试管理丨用户端 App 自动化测试

    随着移动应用的普及和发展 用户端 App 自动化测试成为确保应用质量 提高测试效率的关键环节 这一测试方法不仅可以模拟用户真实的操作行为 还能够覆盖多种设备和平台 为移动应用的稳定性和用户体验提供可靠的保障 选择合适的自动化测试框架 在用户
  • 快过年了,被公司扣着不让辞职,说等公司招到人才可以走,该怎么办?

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 2k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • TS 36.211 V12.0.0-下行(5)-参考信号

    本文的内容主要涉及TS 36 211 版本是C00 也就是V12 0 0
  • 如何防止PCBA焊接中常见的假焊、虚焊缺陷?

    PCBA焊接加工 主要是指将PCB电路板与元器件经过焊锡工艺焊接起来的生产流程 在焊接加工过程中容易出现虚焊和假焊等焊接不良的情况 虚焊和假焊会严重影响产品的可靠性 产品的维修成本也会变高 PCBA焊接加工 中的虚焊和假焊缺陷问题有许多原因
  • 2023 年精选:每个 DevOps 团队都应该了解的 5 种微服务设计模式

    微服务彻底改变了应用程序开发世界 将大型整体系统分解为更小 更易于管理的组件 这种架构风格的特点是独立 松散耦合的服务 带来了从可扩展性 模块化到更高的灵活性等众多优势 DevOps 团队如何最好地利用这种方法来实现最高效率 答案在于理解并
  • 软件测试开发/全日制/测试管理丨接口功能测试

    在复杂而庞大的软件系统中 各个组件之间的顺畅交流是确保整个系统正常运行的基石 接口功能测试 作为软件测试中的关键环节之一 致力于验证系统中不同部分之间的通信协议和数据传递的正确性 以确保整个系统交流的和谐旋律 了解接口功能测试 接口功能测试
  • 现在还有人使用Excel表格做进销存管理吗?

    当然还是有人在使用Excel表格做进销存管理的 比如一些规模小的个体户或小微企业 使用Excel做进销存对这部分群体来说是合理的选择 然而 需要注意的是 随着 企业规模的扩大 Excel的局限性也会显现出来 容易出错 人为操作和数据输入错误
  • 基于springboot+vue实现位置的多分馆图书馆推荐系统演示【附项目源码+论文说明】

    基于springboot实现位置的多分馆图书馆推荐系统演示 摘要 时代的变化速度实在超出人类的所料 21世纪 计算机已经发展到各行各业 各个地区 它的载体媒介 计算机 大众称之为的电脑 是一种特高速的科学仪器 比人类的脑袋要灵光无数倍 什么
  • 题解 | #链表中的节点每k个一组翻转#C++暴力遍历解法

    求大家投下我们腾讯吧 发的一堆sp被鸽了 大数据面试题 Hive 华为14A还是保研华中科技大学 求大家投下我们腾讯吧 发的一堆sp被鸽了 终极 2024校招八股文 MySQL索引 第一篇 招芯片验证实习生 碰到渣导悲哀3年 给秋招画个句号
  • 如何用Chat分析本地化运维服务有哪些?

    问CHAT 本地化运维服务有哪些 CHAT回复 本地化运维服务主要包括以下几大部分 1 系统监控和管理 密切关注系统的性能 实时发现并解决可能出现的问题 以确保服务的稳定和可用性 2 数据备份与恢复 定期进行数据备份 并在出现故障或数据丢失
  • RT-Thread 内核基础(五)

    使用static修饰全局变量作用 限制作用域 如果全局变量前面加上 static 关键字 那么该变量的作用域将被限制在声明它的源文件中 即它将成为一个文件作用域的静态变量 其它源文件无法访问这个变量 这对于控制变量的可见性和避免命名冲突是有
  • 海豚²来了丨DolphinDB 集成 DolphinScheduler,任务调度更轻松

    DolphinDB 是一款高性能时序数据库 DolphinDB 集成了功能强大的编程语言和高容量高速度的批流一体数据分析系统 为海量数据 特别是时间序列数据 的快速存储 检索 计算及分析提供一站式解决方案 在实际生产环境中 经常存在 数据导
  • 软件测试基础知识与面试理论总结(答案+文档)

    一 什么是软件 软件是计算机系统中的程序和相关文件或文档的总称 二 什么是软件测试 说法一 使用人工或自动的手段来运行或测量软件系统的过程 以检验软件系统是否满足规定的要求 并找出与预期结果之间的差异 说法二 软件测试就是利用一定的方法对软
  • 【Leetcode】349. 两个数组的交集

    Leetcode 349 两个数组的交集 题目链接 代码 题目链接 Leetcode 349 两个数组的交集 代码 func intersection nums1 int nums2 int int nums1和nums切片的hash ha
  • Mass-Bruter:一款功能强大的网络常用服务爆破枚举工具

    关于Mass Bruter Mass Bruter是一款功能强大的网络常用服务爆破枚举工具 该工具本质上是一个简单的PoC项目 可以帮助广大研究人员快速在大规模网络系统中执行常见服务爆破枚举 该工具专为红队研究人员设计 支持检测FTP SS
  • 解锁数据之门Roxlabs全球住宅IP赋能海外爬虫与学术研究

    11 20云账房测试一面凉经 华为开奖啦 关于邮储的一些情况 维信金科一面 二面 hr面 我的导师太好了 上海维信金科 技术面试一 Java后端开发岗记录贴 维信金科正式批面经 软件技术领域就业大纲 1 公司分类 你裁掉这个应届生用了多长时
  • TS 36.211 V12.0.0-上行(7)-调制和上变频

    本文的内容主要涉及TS 36 211 版本是C00 也就是V12 0 0 本文具体内容为该协议的
  • 【Leetcode】438. 找到字符串中所有字母异位词

    Leetcode 438 找到字符串中所有字母异位词 题目链接 代码 题目链接 Leetcode 438 找到字符串中所有字母异位词 代码 func findAnagrams s string p string int 枚举p串 统计p串字