本文主要是介绍力扣:777. 在LR字符串中交换相邻字符,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
777. 在LR字符串中交换相邻字符
在一个由 'L'
, 'R'
和 'X'
三个字符组成的字符串(例如"RXXLRXRXL"
)中进行移动操作。一次移动操作指用一个 "LX"
替换一个 "XL"
,或者用一个 "XR"
替换一个 "RX"
。现给定起始字符串 start
和结束字符串 end
,请编写代码,当且仅当存在一系列移动操作使得 start
可以转换成 end
时, 返回 True
。
示例 1:
输入:start = "RXXLRXRXL", end = "XRLXXRRLX" 输出:true 解释:通过以下步骤我们可以将 start 转化为 end: RXXLRXRXL -> XRXLRXRXL -> XRLXRXRXL -> XRLXXRRXL -> XRLXXRRLX
示例 2:
输入:start = "X", end = "L" 输出:false
提示:
1 <= start.length <= 104
start.length == end.length
start
和end
都只包含'L'
,'R'
或'X'
。
1、用charAt
class Solution {public boolean canTransform(String start, String end) {if(!start.replace("X","").equals(end.replace("X","")))return false;//相对位置不能变int i = 0,j = 0;while(i<start.length()){while(i<start.length()&&start.charAt(i)=='X')i++;while(j<end.length()&&end.charAt(j)=='X')j++;if(i<j&&start.charAt(i)=='L')return false;//由于L只能右移,所以不可能比转移后小if(i>j&&start.charAt(i)=='R')return false;//由于R只能左移,所以不可能比转移后大i++;j++;}return true;}
}
2、转为字符数组
class Solution {public boolean canTransform(String start, String end) {if(!start.replace("X","").equals(end.replace("X","")))return false;int i = 0,j = 0;char[] start1 = start.toCharArray();char[] end1 = end.toCharArray();while(i<start.length()){while(i<start.length()&&start1[i]=='X')i++;while(j<end.length()&&end1[j]=='X')j++;if(i<j&&start1[i]=='L')return false;if(i>j&&start1[i]=='R')return false;i++;j++;}return true;}
}
这篇关于力扣:777. 在LR字符串中交换相邻字符的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!