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

LeetCode 777.在LR字符串中交换相邻字符

在一个由 ‘L’ , ‘R’ 和 ‘X’ 三个字符组成的字符串(例如"RXXLRXRXL")中进行移动操作。一次移动操作指用一个 “LX” 替换一个 “XL”,或者用一个 “XR” 替换一个 “RX”。现给定起始字符串 start 和结束字符串 result,请编写代码,当且仅当存在一系列移动操作使得 start 可以转换成 result 时, 返回 True。

示例 1:

输入:start = “RXXLRXRXL”, result = “XRLXXRRLX”
输出:true
解释:通过以下步骤我们可以将 start 转化为 result:
RXXLRXRXL ->
XRXLRXRXL ->
XRLXRXRXL ->
XRLXXRRXL ->
XRLXXRRLX
示例 2:

输入:start = “X”, result = “L”
输出:false

提示:

1 <= start.length <= 104^44
start.length == result.length
start 和 result 都只包含 ‘L’, ‘R’ 或 ‘X’。

start和result去掉X字符后,剩余部分应该相同,L字符只能往左移动,R字符只能往右移动,双指针遍历,遇到不满足的条件返回false即可:

class Solution {
public:bool canTransform(string start, string result) {int n = start.size();int startIdx = 0;int resultIdx = 0;while (startIdx < n && resultIdx < n) {if (start[startIdx] == 'X') {++startIdx;continue;}if (result[resultIdx] == 'X') {++resultIdx;continue;}// 字符不同 ||// 字符是L,但向右移动 ||// 字符是R,但向左移动if (start[startIdx] != result[resultIdx] ||startIdx < resultIdx && start[startIdx] == 'L' ||startIdx > resultIdx && start[startIdx] == 'R') {return false;}++startIdx;++resultIdx;}// 以上循环结束时,可能start没有遍历完,或result没有遍历完// 如果start没有遍历完,且未遍历部分有非X字符,说明result里的非X字符少了while (startIdx < n) {if (start[startIdx] != 'X') {return false;}++startIdx;}// 如果result没有遍历完,且未遍历部分有非X字符,说明result里的非X字符多了while (resultIdx < n) {if (result[resultIdx] != 'X') {return false;}++resultIdx;}return true;}
};

如果start的长度为n,则此算法时间复杂度为O(n),空间复杂度为O(1)。

http://www.dtcms.com/a/362965.html

相关文章:

  • PyTorch 面试题及详细答案120题(106-115)-- 理论与拓展
  • LeetCode 刷题【61. 旋转链表】
  • SAP-MM 配置工厂的名称时候,容易疏忽的点
  • Linux操作系统(6)
  • 《驾驭云原生复杂性:隐性Bug的全链路防御体系构建》
  • 线程安全问题及解决方案
  • STM32 - Embedded IDE - GCC - 如何在工程中生成.bin格式固件
  • 从API到AI Agent:落地模型上下文协议(MCP)的设计模式与核心步骤
  • 【提示词】...(后续单元)在Prompt 的作用
  • [Dify 专栏] 如何通过 Prompt 在 Dify 中模拟 Persona:即便没有专属配置,也能让 AI 扮演角色
  • 【51单片机】【protues仿真】基于51单片机呼叫系统
  • 【Qt】QToolBar、QToolButton的常用用法
  • VR智慧楼宇技术:打造智能办公空间的卓越方案​
  • 【Linux笔记】命令行与vim基础
  • qt使用笔记三之 QGraphicsView、QGraphicsScene 和 QGraphicsPixmapItem 详解
  • 深度学习——基于卷积神经网络实现食物图像分类(数据增强)
  • 教资科三【信息技术】— 教学知识(18~21题): 课程理论知识 教学评价 教学实施 教学设计
  • think
  • Ansible角色:高效开发与管理的秘密
  • Day11--HOT100--25. K 个一组翻转链表,138. 随机链表的复制,148. 排序链表
  • 开源SOTA:阶跃发布端到端语音大模型Step-Audio 2 mini!
  • Cloudflare安全规则实用指南:从路径拦截到IP限制的10个经典范例
  • 使用coil加载图片更新不及时
  • 详解CAD批量打印PDF的黑白模式设置,快速搞定批量输出
  • 【C++框架#2】gflags 和 gtest 安装使用
  • Web3 开发者周刊 65 | DAT的崛起
  • 双八无碳小车cad+三维图+仿真+设计说明书
  • 【实测】安装最新Unity6的常规操作
  • 出版独著与合著的区别及评职称选择指南
  • `<meter> ` 元素 无需 JavaScript/CSS 实现密码强度提示