2026-10-08:一次替换后的子序列。用go语言,给定两个只包含小写字母的字符串 s 和 t。你可以在 s 中至多改动一个位置上的字符,把它换成任意一个小写字母。问经过这样的至多一次改动后,能否让

发布时间:2026/10/9 7:59:56

2026-10-08:一次替换后的子序列。用go语言,给定两个只包含小写字母的字符串 s 和 t。你可以在 s 中至多改动一个位置上的字符,把它换成任意一个小写字母。问经过这样的至多一次改动后,能否让 2026-10-08一次替换后的子序列。用go语言给定两个只包含小写字母的字符串 s 和 t。你可以在 s 中至多改动一个位置上的字符把它换成任意一个小写字母。问经过这样的至多一次改动后能否让 s 按原有先后顺序出现在 t 中。也就是说能否从 t 里删掉一些字符后得到完整的 s只要求字符顺序一致不要求连续。如果能够做到结果为 true否则为 false。1 s.length, t.length 100000。s 和 t 仅由小写英文字母组成。输入 s “cat”, t “chat”。输出 true。解释将 s[1] 从 ‘a’ 替换为 ‘h’得到字符串 “cht”。“cht” 是 “chat” 的子序列因为可以按顺序匹配 ‘c’、‘h’ 和 ‘t’。题目来自力扣3983。大体步骤如下状态一表示完全没有使用过修改机会时s 的前面已经有多少个字符成功按顺序匹配到了 t 的当前前缀中。状态二表示最多使用一次修改机会时s 的前面已经有多少个字符成功按顺序匹配到了 t 的当前前缀中。这里“最多一次”可以是一次都没用也可以是已经用掉了那唯一的一次修改。一开始两个状态都从 0 开始表示还没有匹配任何字符。如果 s 的长度比 t 还长那肯定不可能成为子序列直接返回 false。然后从左到右依次扫描 t 中的每一个字符。对于当前字符会做几件事先尝试让“已经用过修改机会”的状态继续正常匹配。也就是看 s 中当前待匹配的那个字符是否正好等于 t 的当前字符。如果相等就不需要额外修改直接让这个状态往后走一位。再考虑在当前字符处使用修改机会。如果“完全没用过修改机会”的状态已经匹配了 s 的前若干个字符那么我们可以把 s 中下一个还没匹配的字符改成当前 t 的字符这样就能强行多匹配一个字符。于是“已经用过修改机会”的状态至少可以推进到“未用修改机会的状态 1”。如果原来这个状态已经更靠后就保持不变。这一步体现了“最多改一个字符”的选择。然后更新“完全没用过修改机会”的状态。看 s 中当前待匹配的字符是否正好等于 t 的当前字符。如果相等就正常匹配这个状态也往后走一位。每次处理完当前字符后检查“已经用过修改机会”的状态是否已经达到了 s 的总长度。如果达到了说明整个 s 已经按顺序出现在 t 的处理过的部分里而且最多只改了一个字符因此可以直接返回 true。如果 t 的所有字符都扫描完了这个状态仍然没有达到 s 的总长度说明无法做到返回 false。用例子 s “cat”t “chat” 来看初始两个状态都是 0。遇到 t 的 ‘c’s 的第一个字符也是 ‘c’所以两个状态都可以正常前进都变成 1。遇到 ‘h’s 的第二个字符是 ‘a’不等于 ‘h’。未用修改的状态不能前进仍然是 1。但已用修改的状态可以借助修改机会把 s 的第二个字符 ‘a’ 改成 ‘h’于是这个状态推进到 2。遇到 ‘a’已用修改的状态当前待匹配的是 s 的第三个字符 ‘t’不等于 ‘a’不能正常前进但它已经用过一次修改不能再改所以保持 2。未用修改的状态此时待匹配的是 s 的第二个字符 ‘a’正好等于 ‘a’所以前进到 2。遇到 ‘t’已用修改的状态待匹配的是 s 的第三个字符 ‘t’正好等于 ‘t’于是前进到 3。此时已达到 s 的总长度 3返回 true。整个过程中只遍历了 t 一次每个字符只做了常数次比较和更新操作所以总的时间复杂度是 O(t 的长度)。额外使用的变量只有几个整数状态不随字符串长度增长所以总的额外空间复杂度是 O(1)。Go完整代码如下packagemainimport(fmt)funccanMakeSubsequence(s,tstring)bool{n:len(s)ifnlen(t){returnfalse}j0:0// 在不修改的情况下s 的前缀 [0, j0-1] 是 t 的当前前缀的子序列j1:0// 在改过一次的情况下s 的前缀 [0, j1-1] 是 t 的当前前缀的子序列for_,ch:ranget{// j1 普通匹配ifs[j1]byte(ch){j1}// 也可以修改 s[j0] 为 ch强行匹配j1max(j1,j01)// j0 普通匹配ifs[j0]byte(ch){j0}ifj1n{// s 是 t 的子序列returntrue}}returnfalse}funcmain(){s:catt:chatresult:canMakeSubsequence(s,t)fmt.Println(result)}Python完整代码如下# -*-coding:utf-8-*-defcanMakeSubsequence(s:str,t:str)-bool:nlen(s)ifnlen(t):returnFalseifn0:returnTruej00# 不修改时s 的前缀 [0, j0-1] 已匹配j10# 最多修改一次时s 的前缀 [0, j1-1] 已匹配forchint:# j1 尝试正常匹配ifj1nands[j1]ch:j11# 也可以把 s[j0] 修改为 ch强行多匹配一个字符j1max(j1,j01)# j0 尝试正常匹配ifj0nands[j0]ch:j01ifj1n:returnTruereturnFalseif__name____main__:scattchatresultcanMakeSubsequence(s,t)print(result)C完整代码如下#includeiostream#includestring#includealgorithmboolcanMakeSubsequence(conststd::strings,conststd::stringt){intnstatic_castint(s.size());if(nstatic_castint(t.size())){returnfalse;}if(n0){returntrue;}intj00;// 不修改时s 的前缀 [0, j0-1] 已匹配intj10;// 最多修改一次时s 的前缀 [0, j1-1] 已匹配for(charch:t){// j1 尝试正常匹配if(j1ns[j1]ch){j1;}// 也可以把 s[j0] 修改为 ch强行多匹配一个字符if(j0n){j1std::max(j1,j01);}// j0 尝试正常匹配if(j0ns[j0]ch){j0;}if(j1n){returntrue;}}returnfalse;}intmain(){std::string scat;std::string tchat;boolresultcanMakeSubsequence(s,t);std::coutstd::boolalpharesultstd::endl;return0;}
延伸阅读

更多相关文章

2026/10/9 7:59:55

【操作系统-34】经典问题-多消费者问题

多消费者问题多消费者问题是生产者-消费者问题的一个扩展,其中有多个消费者进程(或线程)同时从同一个共享资源(通常是缓冲区)中取出数据进行消费,而生产者依然是唯一的。这个问题的核心思想是,多…

2026/10/9 7:59:55

Dart 4.0 要彻底移除 dart:mirrors,Augmentations 应该要来了

按照目前计划,Dart 3.14 会在 2026 年 11 月正式把它标成 deprecated,然后 Dart 4.0 再完全移除,也就是下个版本开始,这个 Flutter 用不上的,但是一直活跃在 Dart 的历史支持 dart:mirrors 就要完全退出历史舞台了。之…

2026/10/9 7:59:55

现代c++第2.3章 友元函数

先澄清一个容易混淆的点 C 里没有「static class」这个语法。 你在 C# 里写的 static class MathHelper,或者 Java 里的 static class Inner,在 C 里都不存在对应的关键字。C 的 static 放在不同位置,含义完全不同:写法位置含义cl…

2026/10/9 10:06:02

Cocos Creator 3.x 3D拼图开发:核心机制与性能优化

老板把需求丢给我的时候,我正盯着满屏的“羊了个羊”竞品分析发愁。他说得没错,2D拼图市场是真的卷——换皮、联名、剧情化、番外篇,你能想到的姿势同行都试过了。但他下一句话才是重点:“你去做个3D版本的吧。”这句话听着像脑洞…

2026/10/8 10:03:18

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

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

2026/10/8 10:03:20

多智能体集群实战: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/9 0:04:27

毕业论文初稿完成后首次进行AIGC疑似度自查的摸底与分流策略

毕业论文初稿完成后首次进行AIGC疑似度自查的摸底与分流策略当数万字的学位论文初稿经历开题、实验、问卷与多轮文献梳理最终成形时,绝大多数研究生都会面临一道全新的形式审查关卡:AIGC 疑似度排查。在高校毕业审核流程中,盲审前的文本检测通…

2026/10/9 0:04:27

食堂节能改造源头工厂,商用厨房设备焕新方案广受好评

商用厨房作为餐饮经营、单位供餐的核心后勤阵地,其设备配置、动线规划与运维体系直接决定后厨作业效率、运营成本与合规性。从基础的灶具、制冷存储设备,到油烟净化、水处理等配套系统,每一个环节的合理性都与食品安全、能耗管控、消防安全挂…

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

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

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