2337. Move Pieces to Obtain a String
思路
two pointer
两个指标i、j分别对应到start跟target
遇到'_'就继续往下一个,直到两个指标都指向非'_'的元素
接着判断两个指标指向的元素是不是相同
不是就回传false
(1)如果是'L'
看i是不是比j还小
是就回传false
(2)如果是'R'
看i是不是比j还大
是就回传false
如果能这样一直比对成功直到最后
就回传true
golang code
func canChange(start string, target string) bool {
n, m := len(start), len(target)
i, j := 0, 0
for i < n && j < m {
for i < n && start[i] == '_' {
i++
}
for j < m && target[j] == '_' {
j++
}
if i < n && j < m {
if start[i] == target[j] {
if (start[i] == 'L' && i < j) || (start[i] == 'R' && i > j) {
return false
}
i++
j++
} else {
return false
}
}
}
for i < n && start[i] == '_' {
i++
}
for j < m && target[j] == '_' {
j++
}
if i < n || j < m {
return false
}
return true
}