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

LeetCode 2839. 判断通过操作能否让字符串相等 I(Python)超详细题解|贪心算法+模拟

LeetCode 2839. 判断通过操作能否让字符串相等 I(Python)超详细题解|贪心算法+模拟

🏷️ 标签:LeetCode2839、判断字符串相等、Python、贪心算法、模拟、字符串操作、力扣简单题、面试热身题

📌阅读指南:本题属于基础字符串模拟题,考察固定规则下的交换逻辑,思路直白、代码极简,零基础也能快速上手,适合刷题入门和面试热身。

📊 题目难度:简单|📘 题型分类:字符串、贪心、模拟


题目描述

给定两个字符串s1s2,两个字符串长度均为4,且只由小写英文字母组成。

你可以对任意一个字符串,执行以下操作任意次数

选择两个下标ij,满足j - i = 2,交换该字符串中这两个下标对应的字符。由于可以多次交换,同一组内的两个字符可以任意互换位置(交换可逆且可重复执行),不用在意原本顺序。

如果能通过操作让两个字符串完全相等,返回true,否则返回false

核心操作规则

  • 字符串长度固定为4,下标依次为:0、1、2、3

  • 仅允许两种交换:0 ↔ 21 ↔ 3,无其他交换方式

  • 操作次数不限,可对任意一个字符串执行操作

示例 1

输入:s1 = "abcd", s2 = "cdab" 输出:true 解释: 对 s1 交换下标0和2,得到 "cbad" 再交换下标1和3,得到 "cdab",与 s2 相等

示例 2

输入:s1 = "abcd", s2 = "dacb" 输出:false 解释: s1的0、2位字符:['a','c'] s2的0、2位字符:['d','c'] 两组字符不匹配,无法通过规则交换让两个字符串相等

题目提示

  • s1.length == s2.length == 4

  • s1s2仅包含小写英文字母


解题核心思路

关键突破口(必看)

本题的交换规则十分固定,字符只能在固定位置互换,因此可将字符串分为两组独立字符,两组之间互不干扰:

  1. 第一组:下标0和下标2(可互相交换)

  2. 第二组:下标1和下标3(可互相交换)

判定结论

只要同时满足以下两个条件,就可以让两个字符串相等:

  1. s1的0、2位字符,与s2的0、2位字符完全一致(顺序不做要求)

  2. s1的1、3位字符,与s2的1、3位字符完全一致(顺序不做要求)


解法:分组比对法(最优解)

解题步骤

  1. 按照0/2、1/3的规则,将两个字符串分别分组

  2. 每组内部进行排序,消除顺序带来的差异

  3. 逐一比对两组字符,全部匹配返回True,否则返回False

完整可提交代码

classSolution:defcanBeEqual(self,s1:str,s2:str)->bool:# 偶数位组(下标0和2),可互换,排序后对比even_s1=sorted([s1[0],s1[2]])even_s2=sorted([s2[0],s2[2]])# 奇数位组(下标1和3),可互换,排序后对比odd_s1=sorted([s1[1],s1[3]])odd_s2=sorted([s2[1],s2[3]])returneven_s1==even_s2andodd_s1==odd_s2

代码详解

  1. 分组逻辑:偶数位组:对位对比下标0和2的字符,本组内可自由交换

  2. 奇数位组:对位对比下标1和3的字符,本组内可自由交换

  3. 排序对比:因为允许指定位置交换,字符顺序不影响结果,排序后对比能快速判断字符是否一致。

  4. 返回逻辑:只有两组字符完全匹配,才返回True,只要有一组不匹配,就返回False。


复杂度分析

  • 时间复杂度O(1)O(1)O(1)字符串长度固定为4,所有操作都是常数级运算,耗时不随数据规模变化。

  • 空间复杂度O(1)O(1)O(1)只开辟了固定大小的临时变量,无额外大规模空间开销。


本地测试验证

if__name__=='__main__':sol=Solution()# 示例1print(sol.canBeEqual("abcd","cdab"))# True# 示例2print(sol.canBeEqual("abcd","dacb"))# False# 额外测试用例print(sol.canBeEqual("aaaa","aaaa"))# Trueprint(sol.canBeEqual("abab","abab"))# Trueprint(sol.canBeEqual("abcd","abdc"))# False

🚫 常见误区与避坑

  1. 误解交换范围只能交换0↔2、1↔3,不能交换其他位置,不可随意交换字符。

  2. 直接对比原字符串忽略交换规则,直接return s1==s2,会漏掉可交换达标场景,导致大量用例报错。

  3. 过度模拟交换过程无需手动模拟交换步骤,分组排序对比即可,代码更简洁、效率更高。


📝 全文总结

本题是经典的入门级模拟题,核心在于找准固定交换规则,拆分独立字符组,用排序消除顺序差异。

  • 代码极简,效率拉满,无优化空间

  • 适合新手练习字符串处理和逻辑判断

  • 面试常作为热身题出现,务必掌握思路


💡 博主寄语

持续更新LeetCode高频题解,通俗易懂、贴合面试,新手也能轻松上手。

觉得有用可以点赞、收藏、关注,有问题欢迎在评论区交流~

http://www.jsqmd.com/news/556273/

相关文章:

  • Jimeng AI Studio Z-Image Turbo部署教程:A10/A100云服务器高性能配置
  • Equalizer APO:3个步骤让Windows音频效果提升200%
  • 网盘直链解析引擎:打破下载速度壁垒的技术方案
  • etcd和brpc的联合运作在即使通讯系统中的原理
  • Windows 环境下利用 nmap 进行 UDP 端口连通性测试实战
  • PostgresSQL 更改数据库存储目录
  • uni-app微信小程序版本更新策略:冷启动与热启动的优化实践
  • 摊铺机液压系统及组件系列图
  • OBS Studio架构深度解析:如何构建专业级直播系统的核心技术栈
  • Nano-Banana软萌拆拆屋效果展示:潜水服密封拉链结构图
  • 掌控 OpenClaw:核心命令行
  • 轻量级向量引擎:SQLite-vec赋能Java应用的极简方案
  • 3/15
  • 从零构建SST实验范式:基于PsychoPy的抑制控制测量实践
  • 从素材到成片:AI 一站式极速输出——影视创作的新时代革命
  • ARMv8-A中断处理避坑指南:GICv3配置与多核中断路由那些事儿
  • 梳理资料分析的相关知识点
  • 时间管理大师:OpenClaw+nanobot自动规划每日日程
  • 嵌入式Linux开发板CH340驱动安装避坑指南(附详细步骤图)
  • XTDrone室内三维重建实战:如何用Realsense深度相机与VINS-Fusion+RTABMap构建稠密地图
  • 容器镜像瘦身实战:从1GB压到20MB,多阶段构建+清理+distroless完整流程
  • CasRel关系抽取模型新手教程:test.py代码逐行解析与调试技巧
  • 为什么选择开源身份治理平台:authentik作为零成本替代方案的深度技术评估
  • 运营的等级
  • 从Matterport3D到R2R:构建真实世界视觉语言导航基准的实践与思考
  • 如何使用设计模式-误区
  • 智能家居生态壁垒破解:海尔设备无缝接入HomeAssistant的创新方案
  • One-API终极部署实战:从零构建企业级AI接口分发平台
  • 20254101 实验一《Python程序设计》实验报告
  • 《Windows 11 从入门到精通》读书笔记 4.1.1:文件及文件夹的作用——我用“内容 vs 结构”把电脑整理清楚