題目
在一個由 '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'。
解題思路分析1、遍歷;時間複雜度O(n),空間複雜度O(n)
func canTransform(start string, end string) bool { if strings.ReplaceAll(start, "X", "") != strings.ReplaceAll(end, "X", "") { return false } j := 0 for i := 0; i < len(start); i++ { if start[i] == 'L' { // LX=>XL, L是往右的 for end[j] != 'L' { j++ } if i < j { return false } j++ } } j = 0 for i := 0; i < len(start); i++ { if start[i] == 'R' { // XR=>RX, R是往左的 for end[j] != 'R' { j++ } if i > j { return false } j++ } } return true}
總結Medium題目,檢查去除X後字元是否相同,然後遍歷判斷是否對應的L和R的位置