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

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
  • startend中的字符串仅限于'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,二者都无法成为相同字符串。

posted on 2022-10-09 20:00  HHHuskie  阅读(40)  评论(0编辑  收藏  举报

导航