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

777. 在 LR 字符串中交换相邻字符 这道题的本质是“移动约束下的相对位置判断”问题。最优解法并不需要真正执行移动,而是判断是否存在一种符合规则的路径可以达成目标。 阅读详情

题目描述:

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

解题思路:

替换操作可以转换成,把 L 往左移动(需要左边是 X),把 R 往右移动(需要右边是 X)。
那么无论怎么移动,由于 L 和 R 无法互相穿过对方,那么去掉 X 后的剩余字符应该是相同的,否则返回 false。
然后用双指针遍历start和end的每一个位置,分类讨论:
如果当前字符为 L 且 i<j, 那么这个 L 由于无法向右移动,返回 false;
如果当前字符为 R 且 i>j,那么这个 R 由于无法向左移动,返回 false;
遍历完,若中途没有返回 false 就返回 true。

题解代码:

class Solution {
    public boolean canTransform(String start, String end) {
        int n = start.length();
        int i = 0, j = 0;
        while (true) {
        	//start中x是不影响的,直接跳过所有的x
            while (i < n && start.charAt(i) == 'X') {
                ++i;
            }
            //同理可得
            while (j < n && end.charAt(j) == 'X') {
                ++j;
            }
            //如果都顺利到达字符串的结尾  直接返回true
            if (i == n && j == n) {
                return true;
            }
            //如果有其中一个先到达 或者当前字符串的start的end是不相等的  直接返回false
            if (i == n || j == n || start.charAt(i) != end.charAt(j)) {
                return false;
            }
            //如果L不能想左移动,或者R不能向右移动   直接返回false
            if (start.charAt(i) == 'L' && i < j || start.charAt(i) == 'R' && i > j) {
                return false;
            }
            //继续接下来的过程
            ++i;
            ++j;
        }
    }
}
从零到一:i.MX8M Plus开发板全流程开发指南(源码编译、烧录、镜像运行) 本文详细介绍了i.MX8M Plus开发板的全流程开发指南,包括源码编译、烧录和镜像运行等关键步骤。通过实战案例和配置技巧,帮助开发者快速掌握工业级应用开发,提升在边缘计算和AI推理等领域的开发效率。 阅读详情

相关推荐

STM32 HAL库定时器中断实现步进电机S型加减速控制与脉冲精准计数

本文详细介绍了如何使用STM32 HAL库定时器中断实现步进电机的S型加减速控制与脉冲精准计数。通过CubeMX配置定时器、计算PSC和ARR值,并结合S型曲线算法,实现平滑启停和精准定位。文章还提供了脉冲计数方案和常见问题排查技巧,帮助开发者优化步进电机控制性能。

weixin_29189363的博客 373

算法: 相邻字符的交换次数

一个数组中只有两种字符’G’和’B’,可以让所有的G都放在左侧,所有的B都放在右侧, 或者可以让所有的G都放在右侧,所有的B都放在左侧, 但是只能在相邻字符之间进行交换操作,返回至少需要交换几次举个例子,有如下数组: 仔细观察:此时,交换次数才是最少的。也就是说,应该保存每个相同字符的相对次序。怎么实现,有一个L和R,先分别指向arr[0] 根据题意,所以,我们应该先看:看哪个代价移动的更少......

OceanStar的博客 942

【SAP ME 3】JAVA 调用SAP PO WebService

Java调用SAP PO/PI WebService接口

探索 Java 编程的技巧、最佳实践和解决方案。本博客提供针对 Java 开发者的实用指南,涵盖从基础到高级话题,旨在提升编程效率和技能。 847

179、在LR字符串中交换相邻字符

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

qq_34446716的博客 433

编程实践:寒武纪-LLM&VLM模型量化&部署

本文介绍了在MLU370-S4平台上对大模型(LLM/VLM)进行量化的两种方法:SmoothQuant和WeightOnly。以Qwen2-VL-2B模型为例,详细说明了两种量化方式的命令行参数配置,包括必须设置的per_channel选项和量化参数调整建议。量化完成后,提供了模型部署的具体命令示例,包含设备分配、端口设置、并行度等关键参数。文章强调在MLU370芯片上需要手动设置block_size,并指出两种量化方式只能二选一使用。配套资料已上传至百度网盘供参考。

微风❤水墨 507

NL2SQL进阶系列(3):Data-Copilot、Chat2DB、Vanna Text2SQL优化框架开源应用实践详解[Text2SQL]

NL2SQL进阶系列(3):Data-Copilot、Chat2DB、Vanna Text2SQL优化框架开源应用实践详解[Text2SQL]

丨汀、的博客 5420

字符串题目:在LR字符串中交换相邻字符

文章目录题目标题和出处难度题目描述要求示例数据范围解法思路和算法代码复杂度分析 题目 标题和出处 标题:在LR字符串中交换相邻字符 出处:777. 在LR字符串中交换相邻字符 难度 5 级 题目描述 要求 在一个由 ‘L’\texttt{`L'}‘L’、‘R’\texttt{`R'}‘R’ 和 ‘X’\texttt{`X'}‘X’ 三个字符组成的字符串(例如 "RXXLRXRXL"\texttt{"RXXLRXRXL"}"RXXLRXRXL")中进行移动操作。一次移动操作指用一个 "LX"\texttt{"

stormsunshine的博客 1019

MATLAB - 机械臂手眼标定(眼在手内) - 估计安装在机器人上的移动相机的姿态

执行手眼校准有助于操作配备末端执行器(简称 “手”)的机械臂,该末端执行器依赖于摄像头提供的视觉数据。一旦完成了眼在手外的校准,机械臂就能准确地移动到摄像头识别的特定像素位置。这种能力是执行精确拾放任务(如分类、堆垛和分拣)的基础,即使在摄像机的确切位置和方向未知的情况下也是如此。机器人-摄像机系统有两种构型:眼在手内和眼在手外。在眼在手内构型中,摄像头直接安装在机器人手臂的末端执行器上。相反,在眼在手的构型中,摄像头固定在一个静止的物体上,机器人手臂在其视野内。

机器人控制与仿真应用 3348

LeetCode每日一题:777. 在LR字符串中交换相邻字符(中等) 双指针

LeetCode每日一题:777. 在LR字符串中交换相邻字符(中等) 双指针

goblin的博客 649

数仓建模—维度建模之维度表

首先要学会识别维度,维度是相对稳定的、可抽象具有共性的、固有的(天然的)描述度量或事实的上下文属性信息,失去维度信息的度量信息是没有意义的或者说是失去维度信息的事实表是没有意义的。其次要掌握维度表的设计原则和设计流程,从而更加科学的设计维度表,其实这些东西都是术,我们一直都说一句话大道至简,其实如果你掌握了精髓,抛开这些术也可以做到得心应手,这就像张无忌练太极剑一样,忘记了才能达到道的境界,也就是无我,如果做不到就记住这些原则加以应用从而达到术的境界。

2401_84052244的博客 4361

如何利用通达信进行选股集合操作

每个交易者实际上都有自己的选股策略,这是必然的,也会有自己的主观干预,但是还是需要从客观热点股票进行一个比对的,才能说主观和客观相结合不至于​偏离方向。 这几天我也发了节前最后一天我的选股策略盘中的选择结果, 我也从网上拿到了热点股票池,当拿到之后你会发现如何从几十个股票热点股票选出核心票,这就是个问题了,这里面一定要通过股价涨跌幅来进行过滤,而不是通过指标,因为一切指标都是根据价格变化而改变的了,所以​这一步不要走弯路。 1、把拿到的热点股票名单,导入通达信自定义板块 2、删除

抢财猫股票课堂 2583

Leetcode 777. 在LR字符串中交换相邻字符 C++

Leetcode 777. 在LR字符串中交换相邻字符 题目 在一个由 ‘L’ , ‘R’ 和 ‘X’ 三个字符组成的字符串(例如"RXXLRXRXL")中进行移动操作。一次移动操作指用一个"LX"替换一个"XL",或者用一个"XR"替换一个"RX"。现给定起始字符串start和结束字符串end,请编写代码,当且仅当存在一系列移动操作使得start可以转换成end时, 返回True。 示例 : 输入: start = "RXXLRXRXL", end = "XRLXXRRLX" 输出: True 解释: 我

weixin_43750513的博客 315

【使用FPGA实现MIPI DSI接口】——如何使用FPGA实现MIPI DSI接口?这是一个让许多开发者都感到困扰的问题。本文将介绍如何使用FPGA设计和实现...

【使用FPGA实现MIPI DSI接口】——如何使用FPGA实现MIPI DSI接口?MIPI DSI(移动产业处理器接口 - 显示串行接口)是一种用于在移动设备中传输视频数据的标准接口,它是目前大部分智能手机和平板电脑所采用的显示接口。首先,我们需要实现MIPI DSI的物理层接口。在实现MIPI DSI接口后,我们还需要编写驱动程序来控制MIPI DSI显示屏显示图像。这里只是提供了MIPI DSI接口的物理层代码示例,完整的MIPI DSI接口实现需要包括控制器和驱动程序等更多内容。

uote_e的博客 1995

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

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

Umbrella Corporation 7063

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

LeetCode每日一题——777. 在LR字符串中交换相邻字符

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

hyk的博客 470

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

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

(3)当前start为X,end为R,那么无论怎么移动,后面的R也没法和这个X交换,直接返回false;end为L,向后遍历start,直到遇到L交换两个字符,如果到结尾都没有L或者中途遇到了R,直接返回false;(2)当前start为R,end为L,那么无论怎么移动也没法让后面的L穿过R,直接返回false;end为X,向后遍历start,直到遇到X交换两个字符,如果到结尾没有X或者中间遇到了L,直接返回false;i和j分别枚举两个字符串的字符,遇到X直接跳过,当两个字符不同时,如果。

Sasakihaise_的博客 3268

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

LeetCode777 在LR字符串中交换相邻字符(双指针)

题目链接:leetcode777 题面 题目大意 L只能左移,R只能右移,并且移动的时候旁边要有X帮助,问能否从当前移动到目标串。 解题思路 对于一个串,我们只需要考虑非『X』的元素,因为一旦其他两者复原则『X』也随之复原。 广搜 口胡一下,空间复杂度可能很高,并且时间复杂度也不低,可以用双向广搜优化一下。代码略。 双指针 我们从左到右扫,如果当前串和目标串最近的一个非「X」元素不相等,则一定不能复原,因为无论如何都会存在两个移动区间相交的点;如果只能目标串的元素在当前元素能移动的相反方向,则也不能复

小胡同的诗 420

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

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

weixin_30925411的博客 181

LeetCode 777. 在LR字符串中交换相邻字符(双指针)

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

Michael是个半路程序员 1555

Java实现 LeetCode 777 在LR字符串中交换相邻字符(分析题)

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

南 墙 9092

Leetcode 777 在LR字符串中交换相邻字符 (C++题解)

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

jhhh512722654的博客 548

LeetCode 777. 在LR字符串中交换相邻字符--简单思考然后模拟

在LR字符串中交换相邻字符 在一个由 ‘L’ , ‘R’ 和 ‘X’ 三个字符组成的字符串(例如"RXXLRXRXL")中进行移动操作。一次移动操作指用一个"LX"替换一个"XL",或者用一个"XR"替换一个"RX"。现给定起始字符串start和结束字符串end,请编写代码,当且仅当存在一系列移动操作使得start可以转换成end时, 返回True。 示例 : 输入: start = “RXXLRXRXL”, end = “XRLXXRRLX” 输出: True 解释: 我们可以通过以下几步将start.

weixin_43918046的博客 439

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

分析不可交换条件,使用双指针遍历解题

csdn_muxin的博客 589

【Leetcode】 777. 在LR字符串中交换相邻字符

题目链接:https://leetcode-cn.com/problems/swap-adjacent-in-lr-string/description/ 在一个由 'L' , 'R' 和 'X' 三个字符组成的字符串(例如"RXXLRXRXL")中进行移动操作。一次移动操作指用一个"LX"替换一个"XL",或者用一个"XR"替换一个"RX"。现给定起始字符串start和结束字符串end,请编写...

不是猫的菠萝韬想吃鱼 807
上一篇: 【1694. 重新格式化电话号码】
下一篇: 【必知必会的Spring框架知识体系】
硕风和炜
硕风和炜 优质创作者: Java技术领域 优质创作者: Java技术领域
博客等级 码龄7年 2万+粉丝 1024原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硕风和炜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值