作者:
JIWP (JIWP)
2024-12-05 21:15:472337. 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
}