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

Posted blog-of-zxf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了777.在LR字符串中交换相邻字符相关的知识,希望对你有一定的参考价值。

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

示例 :

输入:

start = "RXXLRXRXL",

end = "XRLXXRRLX"

输出: True

解释:

我们可以通过以下几步将start转换成end:

RXXLRXRXL ->

XRXLRXRXL ->

XRLXRXRXL ->

XRLXXRRXL ->

XRLXXRRLX

注意:

1 <= len(start) = len(end) <= 10000。 start和end中的字符串仅限于‘L‘, ‘R‘和‘X‘。

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/swap-adjacent-in-lr-string 著作权归领扣网络所有。

 1     public boolean canTransform(String start, String end) 
 2         int len = start.length(),i=0,j=0;
 3         
 4         while(i< len && j < len)
 5         //第一步:start 和 end 都跳过左边的‘X‘
 6             while(i < len && start.charAt(i) == ‘X‘)
 7                 i++;
 8             
 9             while(j < len && end.charAt(j) == ‘X‘)
10                 j++;
11             
12             if(i == len && j == len) return true;  //XXLXXXX->XXLXXXX
13             if(i == len || j == len) return false;  //X->R
14             
15         //第二步:查看当前两个指针指向的字符是否一样,不一样说明无法通过题意的移动方式转变为相同的字符串
16             if(i < len && j < len && start.charAt(i) != end.charAt(j))
17                 return false;
18             
19         //经过以上操作有:start[i] == end[j] 为‘R’或者‘L’
20         //第三步:检查此时start和end中‘R‘左边的‘X‘的个数,如果前者大于后者,那不能成功。
21         //为什么呢?因为按题意‘R‘只能向右移动,且移动时‘X‘会向左移,即‘R’左边的‘X’只会变多
22         //如果start中‘R’左边的‘X’都比end中的多,那再怎么移动,也不能使start中‘R’左边的‘X’个数等于end中的
23             
24             if(i < len && j < len && start.charAt(i) == ‘R‘ && i > j) return false;
25             
26         //第四步:同理,检查此时start和end中‘L‘左边的‘X‘的个数,如果后者大于前者,那不能成功。
27         //因为‘L’只能向左移动,如果start中‘L’左边的‘X’个数比end中‘L’左边的少,那么start中移动‘L’
28         //只会让这个数更少
29             
30             if(i < len && j < len && start.charAt(i) == ‘L‘ && i < j) return false;
31             
32         //第五步:检查完都进入下一步
33             i++;
34             j++;
35         
36         return true;
37     

 

以上是关于777.在LR字符串中交换相邻字符的主要内容,如果未能解决你的问题,请参考以下文章

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

力扣 每日一题 777. 在LR字符串中交换相邻字符难度:中等,rating: 1938(思维)

在字符串中彼此相邻交换字母

用 Python 交换字符串中每对相邻字符的最简单方法是啥?

python中如何把相邻的字符交换位置

LQ0149 排序枚举