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.pswp.cn/pingmian/95255.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/95255.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RK-Android15-WIFI白名单功能实现

实现WIFI白名单功能 。 三个模式: 1、默认模式:允许搜索所有的WIFI显示、搜索出来 ; 2、禁用模式:允许所有WIFI显示,能够搜索出来 ;3、白名单模式:允许指定WIFI名单显示,被搜索出来 文章目录 前言-需求 一、参考资料 二、核心修改文件和实现方式 1、修改文件 疑问思考 …

Maven + JUnit:Java单元测试的坚实组合

Maven JUnit&#xff1a;Java单元测试的坚实组合Maven JUnit&#xff1a;Java单元测试的坚实组合一、什么是软件测试&#xff1f;二、测试的维度&#xff1a;阶段与方法&#xff08;一&#xff09;测试的四大阶段&#xff08;二&#xff09;测试的三大方法三、main方法测试与…

FFMPEG 10BIT下 Intel b570 qsv 硬解AV1,H265视频编码测试

上10bitffmpeg 8.0 b570最新驱动 &#xff0c;CPU 12100F 显卡 Intel b570 ffmpeg -hwaccel_output_format qsv -i "XXX.mkv" -vf "formatp010le" -c:v hevc_qsv -global_quality 19 -quality best -rc_mode ICQ -preset veryslow -g 120 -refs 5 -b…

SQL分类详解:掌握DQL、DML、DDL等数据库语言类型

如果你是一名数据库运维工程师&#xff0c;或者正在学习数据库技术&#xff0c;那么理解SQL的不同类型是非常重要的。让我们一起看看SQL到底有哪些种类&#xff0c;以及它们各自的作用。 1. 什么是SQL&#xff1f; SQL&#xff08;Structured Query Language&#xff09;是一种…

[特殊字符] 预告!我正在开发一款让自动化操作变得「像呼吸一样自然」的AI神器

各位技术爱好者和创作者朋友们&#xff0c;我要解决一个行业痛点&#xff01;在上一个项目中&#xff08;&#x1f525; 重磅预告&#xff01;我要用AI开发一个自媒体神器&#xff0c;彻底解决创作者的7大痛点&#xff01;&#xff09;&#xff0c;我本来雄心勃勃地打算直接用R…

加密软件哪个好用?加密软件-为数据共享提供安全保障

企业与合作伙伴协作时需共享大量数据&#xff0c;若缺乏保护&#xff0c;数据可能被非法获取&#xff0c;影响合作信任&#xff0c;甚至引发商业纠纷。加密软件可确保共享数据仅授权方可见&#xff0c;为数据共享提供安全保障&#xff0c;推动合作顺利开展。​1.固信软件固信加…

FPGA复位

1:能不复位尽量不要复位&#xff0c;减少逻辑扇出数&#xff1a;比如打拍信号。2:xilinx的FPGA推荐高复位&#xff0c;ATERAL的FPGA推荐低复位。3:尽量使用异步复位&#xff1a;大多数厂商目标库内的触发器都只有异步复位端口&#xff0c;采用同步复位需消耗较多逻辑资源。一&a…

Cursor 教我学 Python

文章目录1. 写在最前面2. Python 语法2.1 yield2.1.1 yield 和 return 的区别2.1.2 golang 中实现 yield 语法3. aiohttp 库3.1 原始写法3.2 修改写法3.2 耗时对比分析4. 碎碎念5. 参考资料1. 写在最前面 最近加了很多 Python Coding 的任务&#xff0c;虽然在 AI 加持下能够顺…

Ollama:本地大语言模型部署和使用详解

1.什么是Ollama&#xff1f; Ollama是一个开源的大语言模型管理工具&#xff0c;具有以下特点&#xff1a; 简单易用&#xff1a;提供简单的命令行接口本地部署&#xff1a;模型运行在本地&#xff0c;保护数据隐私跨平台支持&#xff1a;支持Windows、macOS、Linux丰富的模型…

云计算学习100天-第41天 -普罗米修斯2

目录 五、添加被监控端 1、在web1[192.168.88.100]上部署node exporter 2、在Prometheus服务器上添加监控节点 3、浏览器查看添加结果 六、Grafana的部署 概述 部署步骤 七、监控MySQL数据库 1、配置MySQL 2、配置mysql exporter 3、配置prometheus监控mysql 五、添…

集成电路学习:什么是SVM支持向量机

SVM:支持向量机 SVM,即支持向量机(Support Vector Machine),是一种常用的机器学习算法,特别适用于分类和回归问题。以下是对SVM的详细解析: 一、SVM的基本原理 SVM的基本思想是在特征空间中寻找一个最优的超平面,使得不同类别的样本能够被最大化地分开。这个最优…

盲盒抽谷机小程序开发:如何用3D技术重构沉浸式体验?

在盲盒经济中&#xff0c;“沉浸感”是提升用户停留时长与转化率的核心武器。某品牌通过3D扭蛋机旋转、卡牌翻转特效&#xff0c;使用户停留时长从15秒延长至45秒&#xff0c;转化率提升25%&#xff1b;另一品牌上线AR试戴功能后&#xff0c;单次抽谷时长延长至2分钟&#xff0…

集采与反腐双重压力下,医药销售的破局之道:从资源依赖到价值重构

在医药行业进入集采常态化与反腐纵深推进的新阶段&#xff0c;“资源匮乏”“拜访受阻” 成为萦绕在众多医药销售人员心头的难题。当传统的资金投入、学术活动等资源型打法逐渐失效&#xff0c;行业正面临一场从 “资源驱动” 到 “价值驱动” 的深刻变革。那些曾在市场中创造过…

Elasticsearch常用命令(未完)

网上针对es常用命令好多都是写的感觉非常复杂难以理解&#xff0c;所以我还是自己整理了一下相关的常用命令。 对es输入指令可以用很多种方法比如用es的谷歌浏览器插件&#xff0c;亦或者postman&#xff0c;我个人比较喜欢用postman比较简单直接 1.删除指定索引下的所有数据…

【系统架构设计(七)】 需求工程之:面向对象需求分析方法:统一建模语言(UML)(下)

文章目录一、用例图1. 用例模型建立的系统化流程第一步&#xff1a;识别参与者第二步&#xff1a;合并需求获得用例第三步&#xff1a;细化用例描述第四步&#xff1a;调整用例模型&#xff08;可选步骤&#xff09;2. 用例之间的关系类型二、类图与对象图概念类之间的关系三、…

数据结构——树(04二叉树,二叉搜索树专项,代码练习)

文章目录一、概念二、构造1.1先序序列 构造BST1.2中序序列 转换为BST1.3中序序列链表转换为BST1.4BST转换为中序序列链表1.7BST的序列化和反序列化1.6BST的种数二、BST的增删改查2.1验证是否为BST2.2查找值为val的节点2.3插入一个值为val的节点2.4删除一个值为val的节点2.5恢复…

ArkUI核心功能组件使用

1.Tabs&#xff08;选项卡&#xff09; 1.1 概述 Tabs组件的页面组成包含两个部分&#xff0c;分别是TabContent和TabBar。TabContent是内容页&#xff0c;TabBar是导航页签栏。 TabBar是导航页签栏&#xff0c;页面结构如下图所示&#xff0c;根据不同的导航类型&#xff0c;布…

Qt5 多媒体大纲

一、入门准备 基础知识 熟悉 Qt 的信号槽机制、事件循环 掌握 .pro 工程文件配置&#xff08;QT multimedia multimediawidgets&#xff09; 熟悉常见的音视频格式与编解码器基础 环境配置 Qt Creator Qt 5.x 确认安装了 multimedia 模块与 mediaservice 插件 熟悉调试…

音频数据集采样率选择建议

你好&#xff01;这是一个非常棒且非常重要的问题&#xff0c;在音频机器学习项目中&#xff0c;选择合适的采样率是平衡计算效率和模型性能的关键。 直接回答你的问题&#xff1a;将音频下采样到 800 Hz 对于绝大多数音频分类任务来说都太低了&#xff0c;几乎肯定会丢失大量关…

深度学习系列 | Seq2Seq端到端翻译模型

一、通俗总结Seq2Seq 就像一个 “序列转换器”&#xff1a;先把输入的一段话 “压缩成一个核心意思”&#xff0c;再根据这个意思 “一句句生成另一段话”&#xff0c;能搞定翻译、听写这类 “输入输出不一样长” 的任务&#xff0c;但太长的内容可能记不全&#xff0c;还容易越…