码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-08-10 19:33:39      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:相同   i++   swa   code   成功   示例   字符   char   amp   

在一个由 ‘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字符串中交换相邻字符

标签:相同   i++   swa   code   成功   示例   字符   char   amp   

原文地址:https://www.cnblogs.com/blog-of-zxf/p/11332420.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!