Leetcode 字符串的排列【中等】

发布时间:2026/10/10 2:25:05

Leetcode 字符串的排列【中等】 这个题用集合类去实现的时候踩了好几个坑containsAll()方法是元素维度跟个数无关{a,b}contailsAll{a,b,b}居然返回trueremove方法指定元素类型删除一次只删除一个元素。比如{a,b,b}执行一次remove(new Character(b))以后剩下{a,b}而不是把b全删了remove这里还有个坑删除b的时候你不能remove(b)这样写因为底层会发生类型转换char类型给你变成int类型变成了删除第int个元素。。法一滑动窗口维护s1长度大小的滑动窗口在s2身上滑动每次步长为1。对于每个滑动窗口内部维护一个把s1每个字符都放进去的list集合遍历一个元素就remove一个如果窗口遍历完list集合为空就说明匹配成功了。class Solution { public boolean checkInclusion(String s1, String s2) { ListCharacter list1 new ArrayList(); //答案 boolean ansfalse; //子串入list for(int i0; is1.length();i){ list1.add(s1.charAt(i)); } //主串窗口方式遍历步长1 for(int i0;is2.length()-s1.length();i){ ListCharacter temp new ArrayList(list1); //浅拷贝 for(int offset0;offsets1.length();offset){ //注意1remove(b)这样写的话底层会发生数据类型转换b给你转成int变成remove第int个元素 //所以必须用包装类 //注意2list指定元素的remove只会移除一个比如{a,b,b}移除一次b只会删除一个b不会都删了 temp.remove(new Character(s2.charAt(ioffset))); } if (temp.size()0){ anstrue; break; } } return ans; } }时间复杂度O(m×n)m和n分别是主串和子串的长度空间复杂度O(n)n是子串的长度会超时。想出来法一就可以了官方给的法二有问题法二优化滑动窗口 有问题法一相当于暴力搜索优化暴力搜索的思路就是想一想下一轮是否能利用上一轮的信息。观察滑动窗口的滑动方式就能发现下一轮其实就是把上一轮的第一个元素给剔除再引入一个新元素罢了中间c c d a是不变的也就是可以重复利用的。这样时间复杂度就可以变成大概O(mn)。不能在上一版本的代码上改了因为上一轮的版本不能计数remove操作如果删掉了两个是无感的。要找一个容器来计数首先想到hashmap但是判断匹配的时候判断标准就得是所有key的value都得是0这样又要遍历hashmap官方题解是存在数组里利用了数组的Arrays.equals方法其实这样时间复杂度也是O(m×n)只不过没把Arrays.equals的时间复杂度算进来罢了。class Solution { public boolean checkInclusion(String s1, String s2) { if(s1.length()s2.length()) return false; int[] nums1 new int[26]; int[] nums2 new int[26]; //s1作为用于比较的参考 for(int i0;is1.length();i){ nums1[s1.charAt(i)-a]; } //第一个窗口需要单独处理 for(int i0;is1.length();i){ nums2[s2.charAt(i)-a]; } if(Arrays.equals(nums1,nums2)) return true; //主串滑动窗口步长为1 for(int i1;is2.length()-s1.length();i){ //进入新一轮最前面的一个元素退出 nums2[s2.charAt(i-1)-a]--; //进入窗口一个新元素 nums2[s2.charAt(is1.length()-1)-a]; if(Arrays.equals(nums1,nums2)) return true; } return false; } }
延伸阅读

更多相关文章

2026/10/10 2:25:05

Oracle 11.2 ODBC驱动Windows安装配置与避坑指南

简介:Oracle ODBC驱动(instantclient-odbc-nt-11.2.0.3.0)是Windows平台下连接Oracle数据库的关键中间件,面向使用PowerDesigner、ERStudio等数据建模工具,或需通过ODBC方式访问Oracle的开发与运维人员。它解决的是应用…

2026/10/10 2:25:05

PCA9422与PIC18F87J11协同实现高可靠电源时序控制

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 2:25:05

MacBook Pro键盘使用全指南:快捷键与效率提升实战手册

MacBook Pro 的键盘,你用明白了吗?说实话,我在给身边朋友和同事解决 Mac 使用问题时,发现大部分人天天用的快捷键就那么几个:复制粘贴、切换输入法、截个图。剩下的要么没听说过,要么听过但从来没用过。但这…

2026/10/10 3:25:10

KOS上从零适配logwatch:编译、配置与排坑实录

一个服务器管理员最怕什么?不是系统宕机,而是宕机之后翻日志才发现,一周前就有异常征兆。但让你每天手动翻/var/log/messages、/var/log/secure又不现实。logwatch 这种老牌日志汇总分析工具,就是来干这个的——它把分散在系统各处…

2026/10/10 3:25:10

单片机毕业设计-基于单片机的本地与手机双端管控室内空气质量智能预警系统设计 基于单片机的五项环境参数采集OLED可视化远程监控平台设计(030116)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/10/10 3:25:10

Cursor Agent工作流:重构软件开发全生命周期

1. 项目概述:当写代码不再是开发终点,而只是Agent工作流的起点“写代码只是第一步”——这句话放在五年前可能被当成玩笑,放在今天,它正被越来越多一线开发者当作日常事实来接受。我接触Cursor这个工具是在去年底一个内部技术分享…

2026/10/10 3:25:10

代码仓库被删背后:Git分布式模型与开源依赖的生存指南

今天一起来就跟我说“某知名AI研究者的代码仓库被紧急删除了”。我其实第一反应是“又来了”,这年头删库跑路都不稀奇,但“紧急删库”的真正看点在于:它不是数据库的rm -rf,而是人前脚还在更新、后脚整个仓库在几个小时之内变成40…

2026/10/10 3:25:10

IntelliJ IDEA 快捷键实战指南:场景化分类与动图演示技巧

有人在旁边用 IntelliJ IDEA 写代码,你听到的不是噼里啪啦随便乱敲的声音,而是一串稳定、有节奏的按键音,光标在文件间跳来跳去,代码块被成片选中、移动、重命名,整个过程几乎看不到鼠标指针出现在编辑器里。这种画面出…

2026/10/10 3:20:10

WaveDrom编辑器v2.3.2:用文本描述时序图,支持Git版本管理

简介:Wavedrom Editor v2.3.2 Windows 64位版是一款面向FPGA开发者与电子工程师的本地时序图绘制工具,适合需要离线绘图、快速生成信号波形图的用户。它基于简洁的文本语法描述波形,支持上升沿、下降沿、脉冲、注释与颜色标注,并提…

2026/10/8 10:03:18

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/9 20:15:56

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/8 6:05:44

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 0:04:53

从逻辑门到计算机:数字电路核心原理与全加器搭建实战

如果你拆过一台旧电脑的主板,盯着那些黑乎乎的小芯片看上一会儿,可能会冒出同一个疑问:这堆引脚密集的元件,到底是怎么“变”出那么复杂的应用的?答案并不在某个神秘的部件里,而是在所有芯片内部都在反复使…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑