mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-24 19:04:32 +08:00
77 lines
1.3 KiB
Go
77 lines
1.3 KiB
Go
package leetcode
|
|
|
|
// 解法一
|
|
func pushDominoes(dominoes string) string {
|
|
d := []byte(dominoes)
|
|
for i := 0; i < len(d); {
|
|
j := i + 1
|
|
for j < len(d)-1 && d[j] == '.' {
|
|
j++
|
|
}
|
|
push(d[i : j+1])
|
|
i = j
|
|
}
|
|
return string(d)
|
|
}
|
|
|
|
func push(d []byte) {
|
|
first, last := 0, len(d)-1
|
|
switch d[first] {
|
|
case '.', 'L':
|
|
if d[last] == 'L' {
|
|
for ; first < last; first++ {
|
|
d[first] = 'L'
|
|
}
|
|
}
|
|
case 'R':
|
|
if d[last] == '.' || d[last] == 'R' {
|
|
for ; first <= last; first++ {
|
|
d[first] = 'R'
|
|
}
|
|
} else if d[last] == 'L' {
|
|
for first < last {
|
|
d[first] = 'R'
|
|
d[last] = 'L'
|
|
first++
|
|
last--
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// 解法二
|
|
func pushDominoes1(dominoes string) string {
|
|
dominoes = "L" + dominoes + "R"
|
|
res := ""
|
|
for i, j := 0, 1; j < len(dominoes); j++ {
|
|
if dominoes[j] == '.' {
|
|
continue
|
|
}
|
|
if i > 0 {
|
|
res += string(dominoes[i])
|
|
}
|
|
middle := j - i - 1
|
|
if dominoes[i] == dominoes[j] {
|
|
for k := 0; k < middle; k++ {
|
|
res += string(dominoes[i])
|
|
}
|
|
} else if dominoes[i] == 'L' && dominoes[j] == 'R' {
|
|
for k := 0; k < middle; k++ {
|
|
res += string('.')
|
|
}
|
|
} else {
|
|
for k := 0; k < middle/2; k++ {
|
|
res += string('R')
|
|
}
|
|
for k := 0; k < middle%2; k++ {
|
|
res += string('.')
|
|
}
|
|
for k := 0; k < middle/2; k++ {
|
|
res += string('L')
|
|
}
|
|
}
|
|
i = j
|
|
}
|
|
return res
|
|
}
|