LeetCode 925. Long Pressed Name 长按键入:LeetCode-Go 双指针题解与边界分析

发布时间:2026/11/12 3:58:39

LeetCode 925. Long Pressed Name 长按键入:LeetCode-Go 双指针题解与边界分析 LeetCode 925. Long Pressed Name 长按键入LeetCode-Go 双指针题解与边界分析【免费下载链接】LeetCode-Go✅ Solutions to LeetCode by Go, 100% test coverage, runtime beats 100% | LeetCode 题解项目地址: https://gitcode.com/GitHub_Trending/le/LeetCode-Go导读本文围绕 LeetCode 第 925 题 Long Pressed Name长按键入展开以 LeetCode-Go 仓库中 0925.Long-Pressed-Name 目录 下的官方题解为主体讲解如何用双指针滑动窗口判断长按键盘产生的输入是否可能由给定的名字打出。读完本文你将掌握该题的完整解题思路、Go 源码逐行实现、易错边界用例的判定规则以及如何在本仓库中直接运行测试验证结论。题目描述与约束题目原文摘自 README.mdYour friend is typing his name into a keyboard. Sometimes, when typing a character c, the key might get long pressed, and the character will be typed 1 or more times. You examine the typed characters of the keyboard. Return True if it is possible that it was your friends name, with some characters (possibly none) being long pressed.翻译过来就是你的朋友正在用键盘输入自己的名字。有时在输入某个字符 c 时按键可能被长按导致该字符被重复输入 1 次或多次。现在给你观察到的实际键入结果typed判断它是否可能是朋友的名字name经过若干字符也可能没有字符长按后产生的。题目的约束条件如下name.length 1000typed.length 1000name和typed中的字符均为小写字母由于数据规模只有 1000本题对算法复杂度的要求并不苛刻但核心难点在于正确理解长按的语义并处理各种边界情况。题目大意中文解读给定 2 个字符串后者的字符串中包含前者的字符串。比如在打字的过程中某个字符会多按了几下。判断后者字符串是不是比前者字符串存在这样的长按键盘的情况。更严谨地说typed可以看成是name中每个字符的分组被展开的结果——name中每个字符在typed中出现的次数必须不小于 1等于 1 表示没有长按大于 1 表示长按了且字符出现的相对顺序不能改变。因此typed中不允许出现name中没有的字符typed中同一字符组的长度不能少于name中对应字符在原始串中的计数。解题思路双指针滑动窗口扫描README 中明确指出这一题可以借助滑动窗口的思想2 个字符串一起比较如果遇到有相同的字符串窗口继续往后滑动直到遇到了第一个不同的字符如果遇到两个字符串不相等的情况可以直接返回 false。具体到实现上我们维护两个指针指针i指向name中当前正在匹配的字符指针j指向typed中当前正在匹配的字符。算法流程如下字符对齐比较name[i]与typed[j]。如果两者不同说明typed中出现了name中不存在的字符或顺序错乱直接返回false。吃掉相同字符在name和typed都未越界的前提下只要name[i] typed[j]就让i和j同步前进直到遇到第一个不相同的字符。这一步等价于窗口滑动到当前字符分组的末尾。消化长按产生的多余字符上一步结束后j恰好停在当前字符分组的第一个新字符上。如果typed中剩余的连续字符仍与typed[j-1]相同说明这些是长按产生的重复字符让j继续向前跳过它们。收尾判定循环结束后只有i走完整个name且j走完整个typed才返回true。源码逐行剖析仓库中的核心实现位于 925. Long Pressed Name.go完整代码如下package leetcode func isLongPressedName(name string, typed string) bool { if len(name) 0 len(typed) 0 { return true } if (len(name) 0 len(typed) ! 0) || (len(name) ! 0 len(typed) 0) { return false } i, j : 0, 0 for i len(name) j len(typed) { if name[i] ! typed[j] { return false } for i len(name) j len(typed) name[i] typed[j] { i j } for j len(typed) typed[j] typed[j-1] { j } } return i len(name) j len(typed) }下面分三段解读。1. 空字符串边界预处理if len(name) 0 len(typed) 0 { return true } if (len(name) 0 len(typed) ! 0) || (len(name) ! 0 len(typed) 0) { return false }这段代码处理了三种极端情况name和typed都为空空名字对应空输入直接返回true朋友根本没有打字也就谈不上长按name为空但typed非空输入中凭空出现了字符不可能是空名字的长按结果返回falsename非空但typed为空名字存在但输入为空同样返回false。这两个判断保证了后续双指针循环中i、j的取值始终合法也避免了主循环中可能出现的越界访问。2. 主循环对齐 滑动 消化长按i, j : 0, 0 for i len(name) j len(typed) { if name[i] ! typed[j] { return false } for i len(name) j len(typed) name[i] typed[j] { i j } for j len(typed) typed[j] typed[j-1] { j } }主循环体内是三个连续动作首字符比对name[i] ! typed[j]时直接返回false。这是滑动窗口的窗口起点必须匹配约束同步推进内层第一个for让两个指针在字符相同的前提下一起前进i和j严格同步保证name中的每个字符在typed中都有对应位置跳过重复内层第二个for只推进j。当i已经滑过当前分组的最后一个字符或name已耗尽而typed中仍连续出现与typed[j-1]相同的字符时说明这些多出来的字符是长按产生的予以跳过。注意typed[j-1]一定是上一个已匹配的字符因为j是从一个两串相同字符的位置走过来的此时j 1恒成立不会越界。3. 收尾判定return i len(name) j len(typed)循环退出时存在三种可能必须用这个最终条件区分i走完且j走完完全匹配返回truei走完但j没走完需要看typed剩余字符是否都是长按产生的重复字符——这正是内层第二个for消化过的情况只要消化干净就能通过若消化不干净出现新字符会在下一轮主循环的name[i] ! typed[j]处被拦截并返回falsei没走完但j走完typed提前耗尽name中还有字符没匹配上返回false。测试用例佐证边界情况的判定规则README 中特别提醒这一题的测试用例修改过一次需要注意当name结束以后如果typed还有多余的不同的字符这种情况要输出false。也就是说typed只能比name多出长按导致的重复字符绝不能多出新字符。仓库中的 925. Long Pressed Name_test.go 共包含 11 组用例完整覆盖了题目 4 个示例、长按边界与空串边界输入name输入typed期望结果用例考察点alexaaleextrue题目示例 1a、e被长按alexalexxrfalsename结束后typed出现新字符ralexalexxxxrfalsename结束后先有长按的x再出现新字符ralexalexxxxxtruename结束后typed只剩长按的重复字符saeedssaaeddfalse题目示例 2e计数不足leeleelleeeleetrue题目示例 3字符交替出现且计数足够laidenlaidentrue题目示例 4未发生任何长按kikcxmvzikiikcxxmmvvzzfalse混合长按但顺序/计数不满足i组多出字符true双空串边界afalse空名字 非空输入边界afalse非空名字 空输入边界其中最值得关注的是第二、三、四组用例——它们正是 README 反复强调的测试用例修改部分(alex, alexxr)与(alex, alexxxxr)name已经全部匹配完typed中先出现了大量重复的x可以消化但随后出现的r是name中不存在的字符因此返回false(alex, alexxxxx)name匹配完后typed中剩余的全是x的长按重复可以被正常消化因此返回true。这组对照用例精准地刻画了长按只允许重复已有字符不允许引入新字符这一核心语义。复杂度分析时间复杂度O(n m)其中n len(name)m len(typed)。两个指针i、j各自只会单调递增每个字符最多被访问常数次整体线性空间复杂度O(1)只使用了两个整型指针与若干局部变量没有借助额外数据结构。运行与验证在 LeetCode-Go 仓库中该题以标准 Go 测试形式组织。运行以下命令即可执行全部 11 组用例并验证输出go test -v -run Test_Problem925 ./leetcode/0925.Long-Pressed-Name/测试输出会以【input】:... 【output】:...的形式逐组打印输入与结果见 925. Long Pressed Name_test.go。仓库根目录的 gotest.sh 脚本提供了批量跑全部题解测试的方式go.mod 声明了go 1.19的构建环境可直接复用。延伸思考除了双指针解法本题还有一种等价的分组计数思路分别将name和typed压缩为字符, 连续出现次数的分组序列然后逐一比较——要求分组数相等、对应分组字符相同、且typed分组的计数不小于name分组的计数。两种思路本质等价但双指针版本只需一次遍历、无额外空间是面试中最推荐的写法。从源码结构看本题实现刻意将空串边界单独前置处理925. Long Pressed Name.go主循环内再通过同步推进 消化长按两段内层循环处理核心逻辑这种先挡边界、再写主逻辑的写法也值得在其他字符串双指针题目中复用。【免费下载链接】LeetCode-Go✅ Solutions to LeetCode by Go, 100% test coverage, runtime beats 100% | LeetCode 题解项目地址: https://gitcode.com/GitHub_Trending/le/LeetCode-Go创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/11/11 8:05:31

Arm-2D静态工程深度解析:宏驱动的嵌入式图形加速原理

1. 项目概述:为什么一个“静态工程评测”值得花三天拆完所有头文件和Makefile Arm-2D这个库,我第一次在客户项目里见到时,它被塞在一个叫 graphics_lib 的子目录下,连个README都没有,只有三行注释:“ARM官…

2026/11/9 20:18:35

Skynet 游戏框架装备系统实战:材料合成与随机属性完整指南

Skynet 游戏框架装备系统实战:材料合成与随机属性完整指南 【免费下载链接】skynet A lightweight online game framework 项目地址: https://gitcode.com/GitHub_Trending/sk/skynet Skynet 是一个基于 C Lua 的轻量级在线游戏框架。本文以「装备打造」玩法…

2026/11/12 3:54:18

龙湾电工证哪里报名的 怎么报名不踩坑

龙湾电工证哪里报名的 怎么报名不踩坑 实操考试心里没底怕挂科,龙湾电工证哪里报名的,怎么报名才能一次过?不少学员在备考前最大的担心不是理论题,而是实操考试的流程和标准,尤其是像低压电工、高压电工这类工种,操作失误就可能被判定不合格。…

2026/11/12 3:54:18

工地太忙根本没时间复习考试?巩义电工证在哪里考呢良心建议来了

工地太忙根本没时间复习考试?巩义电工证在哪里考呢良心建议来了 工地太忙根本没时间复习考试,这是很多一线电工的真实写照。尤其在巩义这种施工项目集中的地方,电工证不仅关系到能否上岗,更是职业发展的“通行证”。但很多小伙伴一听到要考试,就犯愁:*…

2026/11/12 3:54:18

接线就需要考取电工证良心建议:电工证考前考后全攻略

接线就需要考取电工证良心建议:电工证考前考后全攻略 你是不是正为 急需特种作业证才能上岗找工作 而焦虑?别急,接线就需要考取电工证,这是很多电工从业者绕不开的门槛,尤其是像我这样在漯河劳务班组做负责人的人,深知一纸证书就是敲门砖。今天就从实…

2026/11/12 3:54:18

海兴哪里能办电工证考前押题攻略:外省证能不能转,全在这篇说透了

海兴哪里能办电工证考前押题攻略:外省证能不能转,全在这篇说透了 之前考的证在外省能不能转过来?这个问法几乎成了所有想考电工证或者已经在别的地方考了证的朋友们最关心的问题。别急,今天这篇【海兴哪里能办电工证】考前押题攻略,不仅告诉你怎么转,还…

2026/11/12 3:49:17

电工证不需复审吗?考前押题帮你搞懂新规和备考方向

电工证不需复审吗?考前押题帮你搞懂新规和备考方向 证书过期了不知道怎么复审延期,这事儿真不是小事。尤其像低压电工证、高压电工证这类特种作业操作证,如果逾期不处理,不仅影响正常上岗,还可能被认定为“无证上岗”,面临企业处罚甚至个人责任。现在很…

2026/11/11 12:42:59

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/12 0:04:01

工地太忙根本没时间复习考试?学习电工证到哪里学通过率揭秘

工地太忙根本没时间复习考试?学习电工证到哪里学通过率揭秘 工地太忙根本没时间复习考试?你不是一个人。作为一名在南阳卧龙区干了七八年市政公用工程的电工,我深知这个问题的现实性。电工证不仅是工作的“入场券”,更是职业发展的“通行证”,但备考过程…

2026/11/12 0:04:01

双流电工证考别怕挂科!郑州报考避坑指南全攻略

双流电工证考别怕挂科!郑州报考避坑指南全攻略 实操考试心里没底怕挂科?双流电工证考在郑州报名,很多人因为不了解流程、准备不充分,白白浪费时间和金钱。作为三门峡应届工程类毕业生,我也曾经历过这样的焦虑。今天就从零开始,手把手教你如何避开郑州报…

2026/11/12 0:04:01

之前考的证在外省能不能转过来 怎么报名考电工证培训价格多少

之前考的证在外省能不能转过来 怎么报名考电工证培训价格多少 之前考的证在外省能不能转过来?这个问题确实让不少准备换城市工作的朋友犯了难,尤其像电工证这种实操性很强的证书,很多人担心跨省后证书能不能继续用。其实,只要符合相关流程,是可以顺利转…

2026/11/11 20:27:01

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/10 10:29:37

SSM电子书店源码全解析:结构、原理、部署与排错实战

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

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

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

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