在一个由 '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'。
var canTransform = function(start, end) {
const n = start.length
let i = j = 0
while (i < n && j < n) {
while (i < n && start[i] === 'X') i++;
while (j < n && end[j] === 'X') j++;
if (i < n && j < n) {
if (start[i] !== end[j]) return false
if (start[i] === 'L' && i < j || start[i] === 'R' && i > j) return false
i++
j++
}
}
while (i < n) {
if (start[i] !== 'X') return false
i++
}
while (j < n) {
if (end[j] !== 'X') return false
j++
}
return true
};
function canTransform(start: string, end: string): boolean {
const n = start.length
let i = 0, j = 0
while (i < n && j < n) {
while (i < n && start[i] === 'X') i++
while (j < n && end[j] === 'X') j++
if (i < n && j < n) {
if (start[i] !== end[j]) return false
if (start[i] === 'L' && i < j || start[i] === 'R' && i > j) return false
i++
j++
}
}
while (i < n) {
if (start[i] !== 'X') return false
i++
}
while (j < n) {
if (end[j] !== 'X') return false
j++
}
return true
};
class Solution {
function canTransform($start, $end) {
$n = strlen($start);
$i = 0;
$j = 0;
while ($i < $n && $j < $n) {
while ($i < $n && $start[$i] === 'X') $i++;
while ($j < $n && $end[$j] === 'X') $j++;
if ($i < $n && $j < $n) {
if ($start[$i] !== $end[$j]) return false;
if ($start[$i] === 'L' && $i < $j || $start[$i] === 'R' && $i > $j) return false;
$i++;
$j++;
}
}
while ($i < $n) {
if ($start[$i] !== 'X') return false;
$i++;
}
while ($j < $n) {
if ($end[$j] !== 'X') return false;
$j++;
}
return true;
}
}
func canTransform(start string, end string) bool {
n, i, j := len(start), 0, 0
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
}
if (start[i] == 'L' && i < j || start[i] == 'R' && i > j) {
return false
}
i++
j++
}
}
for i < n {
if start[i] != 'X' {
return false
}
i++
}
for j < n {
if end[j] != 'X' {
return false
}
j++
}
return true
}
class Solution {
public boolean canTransform(String start, String end) {
int n = start.length(), i = 0, j = 0;
while (i < n && j < n) {
while (i < n && start.charAt(i) == 'X') i++;
while (j < n && end.charAt(j) == 'X') j++;
if (i < n && j < n) {
if (start.charAt(i) != end.charAt(j)) return false;
if (start.charAt(i) == 'L' && i < j || start.charAt(i) == 'R' && i > j) return false;
i++;
j++;
}
}
while (i < n) {
if (start.charAt(i) != 'X') return false;
i++;
}
while (j < n) {
if (end.charAt(j) != 'X') return false;
j++;
}
return true;
}
}
public class Solution {
public bool CanTransform(string start, string end) {
int n = start.Length, i = 0, j = 0;
while (i < n && j < n) {
while (i < n && start[i] == 'X') i++;
while (j < n && end[j] == 'X') j++;
if (i < n && j < n) {
if (start[i] != end[j]) return false;
if (start[i] == 'L' && i < j || start[i] == 'R' && i > j) return false;
i++;
j++;
}
}
while (i < n) {
if (start[i] != 'X') return false;
i++;
}
while (j < n) {
if (end[j] != 'X') return false;
j++;
}
return true;
}
}
bool canTransform(char * start, char * end){
int n = strlen(start), i = 0, j = 0;
while (i < n && j < n) {
while (i < n && start[i] == 'X') i++;
while (j < n && end[j] == 'X') j++;
if (i < n && j < n) {
if (start[i] != end[j]) return false;
if (start[i] == 'L' && i < j || start[i] == 'R' && i > j) return false;
i++;
j++;
}
}
while (i < n) {
if (start[i] != 'X') return false;
i++;
}
while (j < n) {
if (end[j] != 'X') return false;
j++;
}
return true;
}
class Solution {
public:
bool canTransform(string start, string end) {
int n = start.size(), i = 0, j = 0;
while (i < n && j < n) {
while (i < n && start[i] == 'X') i++;
while (j < n && end[j] == 'X') j++;
if (i < n && j < n) {
if (start[i] != end[j]) return false;
if (start[i] == 'L' && i < j || start[i] == 'R' && i > j) return false;
i++;
j++;
}
}
while (i < n) {
if (start[i] != 'X') return false;
i++;
}
while (j < n) {
if (end[j] != 'X') return false;
j++;
}
return true;
}
};
class Solution:
def canTransform(self, start: str, end: str) -> bool:
n, i, j = len(start), 0, 0
while i < n and j < n:
while i < n and start[i] == 'X': i += 1
while j < n and end[j] == 'X': j += 1
if i < n and j < n:
if start[i] != end[j]: return False
if start[i] == 'L' and i < j or start[i] == 'R' and i > j: return False
i, j = i + 1, j + 1
while i < n:
if start[i] != 'X': return False
i += 1
while j < n:
if end[j] != 'X': return False
j += 1
return True