Files
LeetCode-Go/leetcode/0838.Push-Dominoes/838. Push Dominoes.go
2020-08-07 17:06:53 +08:00

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
}