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'
。
func canTransform(start, end string) bool { i, j, n := 0, 0, len(start) for i < n && j < n { for i < n && start[i] == 'X' { i++ } for j < n && end[j] == 'X' { j++ } if i < n && j < n { if start[i] != end[j] { return false } c := start[i] if c == 'L' && i < j || c == 'R' && i > j { return false } i++ j++ } } // 判断后面的所有字符是否都为X for i < n { if start[i] != 'X' { return false } i++ } for j < n { if end[j] != 'X' { return false } j++ } return true }
分析:start和end中所有L、R的相对位置一定是对应好的,L、R只能和X换位置,所以若start中第一个R在L的后面,而end中第一个R在L的前面,(如二者分别:RXL , LXR)那无论如何变换start,二者都无法成为相同字符串。
标签:777,end,++,start,LR,&&,字符串,return From: https://www.cnblogs.com/fulaien/p/16773490.html