当前位置: 首页 > article >正文

009找到字符串中所有字母异位词

找到字符串中所有字母异位词题目链接https://leetcode.cn/problems/find-all-anagrams-in-a-string/description/?envTypestudy-plan-v2envIdtop-100-liked我的解答public ListInteger findAnagrams(String s, String p) { int sLengths.length(), pLengthp.length(); int[] count new int[26]; for(int i0; ipLength; i){ count[p.charAt(i)-a]; } ListInteger ans new ArrayList(); int l0,rl; while(rsLength){ while(rsLengthrlpLengthcount[s.charAt(r)-a]!0){ count[s.charAt(r)-a]--; r; } if(rsLengthrlpLength){ if(!p.contains(String.valueOf(s.charAt(r)))){ while(lr){ count[s.charAt(l)-a]; l; } l; r; }else{ count[s.charAt(l)-a]; l; } continue; } if(rlpLength){ ans.add(l); count[s.charAt(l)-a]; l; } if(rsLength){ break; } } return ans; }分析代码的时间复杂度为O(n)空间复杂度为O(Σ)Σ 为所有可能的字符数。我的思路是利用count数组维护滑动窗口中字符串s的子串要与字符串p构成异位词还需要的字符及个数然后字符串s用双指针维护一个滑动窗口窗口的左指针指向异位词的开头右指针不断向右移动直到维护的窗口长度达到字符串p的长度或遇到不属于p的字符或遇到属于p但是个数以及满足了的字符然后分情况进行讨论在下方我只讨论两种情况其他情况较为简单暂不做讨论。​ 情况一遇到不属于p的字符。此时直接将左指针和右指针都移动到右指针的下一个位置直接开始下一轮循环。注意移动指针的同时还需要将count中l走过的位置中属于p的字符的个数减一。​ 情况二遇到属于p但是个数以及满足了的字符。此时只需将count中左指针指向的字符个数减一然后将左指针向后移动一位直接开启下一轮循环。看了官方题解后的解答//方法一滑动窗口 //时间复杂度O(m(n−m)×Σ) //空间复杂度O(Σ) //n 为字符串 s 的长度m 为字符串 p 的长度Σ 为所有可能的字符数。 public ListInteger findAnagrams(String s, String p) { int sLens.length(), pLenp.length(); if(sLenpLen){ return new ArrayListInteger(); } int[] sCount new int[26]; int[] pCount new int[26]; ListInteger ans new ArrayList(); for(int i0; ipLen; i){ sCount[s.charAt(i)-a]; pCount[p.charAt(i)-a]; } if(Arrays.equals(sCount,pCount)){ ans.add(0); } for(int i0; isLen-pLen; i){ sCount[s.charAt(i)-a]--; sCount[s.charAt(ipLen)-a]; if(Arrays.equals(sCount,pCount)){ ans.add(i1); } } return ans; } //方法二优化的滑动窗口 //时间复杂度O(nmΣ) //空间复杂度O(Σ) //n 为字符串 s 的长度m 为字符串 p 的长度Σ 为所有可能的字符数。 public ListInteger findAnagrams(String s, String p) { int sLens.length(), pLenp.length(); if(sLenpLen){ return new ArrayListInteger(); } int[] count new int[26];//维护当前窗口中的子串需要和p构成异位词缺少的字符个数 ListInteger ans new ArrayList(); for(int i0; ipLen; i){ count[s.charAt(i)-a]; count[p.charAt(i)-a]--; } int diff0;//维护当前窗口中子串的字符个数与p的字符个数不相同的个数 for(int i0; i26; i){ if(count[i]!0){ diff; } } if(diff0){ ans.add(0); } for(int i0; isLen-pLen; i){ if(count[s.charAt(i)-a]0){//从0——-1即这个字符的个数从相同变得不同 diff; } else if(count[s.charAt(i)-a]1){//从1——0即这个字符的个数从相同变得不同 diff--; } count[s.charAt(i)-a]--; if(count[s.charAt(ipLen)-a]-1){//从-1——0即这个字符的个数从不同变得相同 diff--; } else if(count[s.charAt(ipLen)-a]0){//从0——1即这个字符的个数从不同变得相同 diff; } count[s.charAt(ipLen)-a]; if(diff0){ ans.add(i1); } } return ans; }分析​ 1、方法一和方法二都采用滑动窗口解题用滑动窗口构造一个长度等于p的长度的s的子串。​ 2、方法一直接用两个数组各自维护窗口中s子串的字符个数和p的字符个数然后每次通过比较两个数组内容是否相同从而判断当前窗口构造的子串是否是p的异位词。​ 3、方法二只维护了一个diff即当前窗口构造的子串的字符个数与p的字符个数不同的总个数只需根据窗口每次的变化判断是否对diff产生影响最后通过判断diff是否等于0来判断当前窗口构造的子串是否是p的异位词。总结本题主要是用滑动窗口构造一个与p长度相等的s的子串然后采用“两个数组分别维护各自的字符数量从而进行比较”或“只维护两个字符串中个数不相等的字符的个数”来判断是否是异位词即可。

相关文章:

009找到字符串中所有字母异位词

找到字符串中所有字母异位词 题目链接&#xff1a;https://leetcode.cn/problems/find-all-anagrams-in-a-string/description/?envTypestudy-plan-v2&envIdtop-100-liked 我的解答&#xff1a; public List<Integer> findAnagrams(String s, String p) {int sLengt…...

Ubuntu开机慢?别急着重装,试试这个自带的‘秒表’systemd-analyze

Ubuntu开机慢&#xff1f;用systemd-analyze精准定位问题根源 当你按下电源键&#xff0c;泡好一杯咖啡回来发现Ubuntu还在启动界面转圈&#xff0c;这种体验确实令人沮丧。许多用户的第一反应是重装系统或升级硬件&#xff0c;但往往忽略了系统内置的强大诊断工具——systemd-…...

Taotoken的按token计费模式如何让AI应用成本更加可控

Taotoken的按token计费模式如何让AI应用成本更加可控 1. 精细化成本监控体系 Taotoken平台提供的按token计费模式&#xff0c;从根本上改变了传统AI服务按调用次数或固定套餐计费的不透明性。在控制台的用量看板中&#xff0c;开发者可以清晰看到每一次API调用的token消耗明细…...

别再手写Word报告了!用Java+poi-tl 1.10.0,5分钟搞定动态数据填充

Javapoi-tl 1.10.0&#xff1a;5分钟实现Word报告自动化生成实战指南 每次月底赶制几十份绩效报告时&#xff0c;你是否也经历过这样的崩溃时刻&#xff1f;盯着屏幕反复复制粘贴数据&#xff0c;稍不留神就会把张三的KPI数据填到李四的报告中&#xff0c;最后不得不逐份人工核…...

告别模糊图标!3步让Windows完美预览iPhone的HEIC照片

告别模糊图标&#xff01;3步让Windows完美预览iPhone的HEIC照片 【免费下载链接】windows-heic-thumbnails Enable Windows Explorer to display thumbnails for HEIC/HEIF files 项目地址: https://gitcode.com/gh_mirrors/wi/windows-heic-thumbnails 还在为Windows电…...

如何用H5Maker开源编辑器解决可视化H5制作难题:实践指南

如何用H5Maker开源编辑器解决可视化H5制作难题&#xff1a;实践指南 【免费下载链接】h5maker h5编辑器类似maka、易企秀 账号/密码&#xff1a;admin 项目地址: https://gitcode.com/gh_mirrors/h5/h5maker H5Maker是一款基于Vue.js和Node.js的开源H5编辑器&#xff0c…...

Photoshop AI插件终极指南:SD-PPP如何免费打通AI绘图与专业设计工作流

Photoshop AI插件终极指南&#xff1a;SD-PPP如何免费打通AI绘图与专业设计工作流 【免费下载链接】sd-ppp A Photoshop AI plugin 项目地址: https://gitcode.com/gh_mirrors/sd/sd-ppp 在AI绘图技术飞速发展的今天&#xff0c;设计师们面临着一个关键挑战&#xff1a;…...

魔兽争霸3终极优化指南:5分钟解锁现代游戏体验

魔兽争霸3终极优化指南&#xff1a;5分钟解锁现代游戏体验 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3在现代电脑上的糟糕体验而烦…...

终极指南:用Nucleus Co-Op实现完美分屏游戏体验的5个关键步骤

终极指南&#xff1a;用Nucleus Co-Op实现完美分屏游戏体验的5个关键步骤 【免费下载链接】nucleuscoop Starts multiple instances of a game for split-screen multiplayer gaming! 项目地址: https://gitcode.com/gh_mirrors/nu/nucleuscoop 你是否曾梦想过和朋友一起…...

2025最权威的六大AI辅助论文方案推荐

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 可作为学术写作辅助类系统来用的AI论文工具&#xff0c;集成了文献检索功能模块&#xff0c…...

Zotero插件市场:三步打造你的专属学术工具箱

Zotero插件市场&#xff1a;三步打造你的专属学术工具箱 【免费下载链接】zotero-addons Zotero Add-on Market | Zotero插件市场 | Browsing, installing, and reviewing plugins within Zotero 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-addons 你是否还在…...

从账单追溯角度看 Taotoken 如何实现计费透明化

从账单追溯角度看 Taotoken 如何实现计费透明化 1. 账单概览与核心维度 Taotoken 控制台的账单模块为开发者提供了多维度的消费数据聚合视图。登录后进入「账单与用量」页面&#xff0c;顶部仪表盘会展示当前结算周期的总消耗金额、Token 使用量以及日均开销趋势图。默认时间…...

不止于RGB:深入‘同色异谱’与CIE XYZ,为你揭开色彩科学在数字产品中的隐藏逻辑

不止于RGB&#xff1a;深入‘同色异谱’与CIE XYZ&#xff0c;为你揭开色彩科学在数字产品中的隐藏逻辑 在数字影像处理领域&#xff0c;我们常常被RGB数值所包围&#xff0c;却鲜少追问&#xff1a;为什么三个数字就能定义人眼可见的千万种颜色&#xff1f;这背后隐藏着人类视…...

浏览器Canvas渲染劫持与文档批量下载性能优化:kill-doc架构设计与实现原理深度解析

浏览器Canvas渲染劫持与文档批量下载性能优化&#xff1a;kill-doc架构设计与实现原理深度解析 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档&#xff0c;但是相关网站浏览体验不好各种广告&#xff0c;各种登录验证&#xff0c;需要很多步骤才能下载文档…...

Windows音频路由神器:Audio Router实现多程序音频智能分流指南

Windows音频路由神器&#xff1a;Audio Router实现多程序音频智能分流指南 【免费下载链接】audio-router Routes audio from programs to different audio devices. 项目地址: https://gitcode.com/gh_mirrors/au/audio-router 你是否曾经遇到过这样的困扰&#xff1a;…...

如何高效解决CoolProp热力学参数差异:工程师实战指南

如何高效解决CoolProp热力学参数差异&#xff1a;工程师实战指南 【免费下载链接】CoolProp Thermophysical properties for the masses 项目地址: https://gitcode.com/gh_mirrors/co/CoolProp 在工程热力学计算中&#xff0c;许多开发者在使用CoolProp开源库时都遇到过…...

不只是调光:用CMS79F133的PWM玩点不一样的,比如做个简易DAC或电机驱动

解锁CMS79F133的PWM潜能&#xff1a;从简易DAC到电机驱动的创意实践 在嵌入式开发领域&#xff0c;PWM&#xff08;脉冲宽度调制&#xff09;常被简单理解为LED亮度调节工具&#xff0c;但它的应用远不止于此。中微半导体CMS79F133芯片搭载的10位PWM模块&#xff0c;凭借其灵活…...

从‘刷到’到‘下单’:用AISAS模型优化你的独立站Shopify转化漏斗

从‘刷到’到‘下单’&#xff1a;用AISAS模型优化你的独立站Shopify转化漏斗 在跨境电商的战场上&#xff0c;独立站卖家们每天都在经历一场无声的漏斗战争。当用户从社交媒体或广告点击进入你的Shopify店铺时&#xff0c;一场精心设计的转化之旅就此展开。AISAS模型——这个源…...

深度解析抖音无水印下载技术:架构设计与最佳实践

深度解析抖音无水印下载技术&#xff1a;架构设计与最佳实践 【免费下载链接】douyin_downloader 抖音短视频无水印下载 win编译版本下载&#xff1a;https://www.lanzous.com/i9za5od 项目地址: https://gitcode.com/gh_mirrors/dou/douyin_downloader 抖音无水印下载工…...

戴尔G15终极散热控制:如何解锁笔记本性能的完整指南?

戴尔G15终极散热控制&#xff1a;如何解锁笔记本性能的完整指南&#xff1f; 【免费下载链接】tcc-g15 Thermal Control Center for Dell G15 - open source alternative to AWCC 项目地址: https://gitcode.com/gh_mirrors/tc/tcc-g15 还在为游戏本过热降频而烦恼吗&am…...

终极GTA模组界面开发指南:如何用RAGENativeUI轻松创建专业级游戏菜单

终极GTA模组界面开发指南&#xff1a;如何用RAGENativeUI轻松创建专业级游戏菜单 【免费下载链接】RAGENativeUI 项目地址: https://gitcode.com/gh_mirrors/ra/RAGENativeUI 你是否曾经梦想为GTA V制作酷炫的模组&#xff0c;却被复杂的界面开发劝退&#xff1f;RAGEN…...

MicroClaw:轻量级AI Agent编排框架的设计、部署与实战指南

1. 项目概述&#xff1a;一个轻量级但五脏俱全的Agent编排框架 如果你最近也在研究AI Agent&#xff0c;想找一个既能快速上手、又能清晰理解其内部运作原理的项目&#xff0c;那么MicroClaw绝对值得你花时间看看。我自己在尝试过LangChain、AutoGen这些“大块头”之后&#x…...

Linux驱动调试利器:不写代码,用sysfs直接玩转GPIO(以IMX6ULL为例)

Linux驱动调试利器&#xff1a;不写代码&#xff0c;用sysfs直接玩转GPIO&#xff08;以IMX6ULL为例&#xff09; 在嵌入式Linux开发中&#xff0c;GPIO&#xff08;通用输入输出&#xff09;是最基础也最常用的硬件接口之一。传统上&#xff0c;我们需要编写完整的驱动程序才能…...

OpenCore Legacy Patcher完整指南:让2008-2017款旧Mac免费升级最新macOS的终极方案

OpenCore Legacy Patcher完整指南&#xff1a;让2008-2017款旧Mac免费升级最新macOS的终极方案 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你是否有一台被…...

Code Interpreter API实战:逆向工程实现AI代码执行自动化

1. 项目概述&#xff1a;当Code Interpreter有了API接口如果你和我一样&#xff0c;对OpenAI的Code Interpreter&#xff08;代码解释器&#xff09;功能垂涎已久&#xff0c;但又苦于它被深度集成在ChatGPT Plus的Web界面里&#xff0c;无法在自己的应用里调用&#xff0c;那么…...

大模型安全干预:机制与向量操控实践

1. 项目概述在大模型技术快速发展的今天&#xff0c;如何确保其安全性和可靠性已成为行业关注的焦点。作为一名长期从事AI安全研究的从业者&#xff0c;我深刻体会到模型干预技术的重要性。最近完成的一个项目让我对"机制干预"和"向量操控"这两种关键技术有…...

构建AI长期记忆系统:从向量数据库到个性化助手实践

1. 项目概述&#xff1a;构建你的个人AI记忆体最近几年&#xff0c;AI助手越来越聪明&#xff0c;但总感觉它们缺少了点“灵魂”——它们记不住你昨天和它聊了什么&#xff0c;更别提你上周分享的那个有趣的想法&#xff0c;或者你为某个项目设定的长期目标。每次对话都像是和一…...

3步让Android Studio说中文:小白也能懂的本地化指南

3步让Android Studio说中文&#xff1a;小白也能懂的本地化指南 【免费下载链接】AndroidStudioChineseLanguagePack AndroidStudio中文插件(官方修改版本&#xff09; 项目地址: https://gitcode.com/gh_mirrors/an/AndroidStudioChineseLanguagePack 你是否曾经在Andr…...

UniVideo:多模态统一框架实现视频理解与生成

1. UniVideo&#xff1a;视频理解与生成的多模态统一框架视频内容创作正经历一场由多模态大语言模型&#xff08;MLLM&#xff09;和扩散变换器&#xff08;DiT&#xff09;共同驱动的技术革命。传统视频生成系统通常只能处理单一任务&#xff08;如文本到视频生成&#xff09;…...

如何快速无损剪辑视频:新手用户的完整指南

如何快速无损剪辑视频&#xff1a;新手用户的完整指南 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 想要快速剪辑视频却担心操作复杂&#xff1f;作为视频编辑新手&…...