首頁>技術>

題目

在一個由 '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的位置

7
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 每次10分鐘跟我學Python(第三十二次課)