add new solutions
This commit is contained in:
parent
7d2a6718b3
commit
1f0aa6d417
6 changed files with 258 additions and 0 deletions
40
solutions/18/q1888/solution.go
Normal file
40
solutions/18/q1888/solution.go
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
// Package q1888 implements a solution for https://leetcode.com/problems/minimum-number-of-flips-to-make-the-binary-string-alternating/
|
||||
package q1888
|
||||
|
||||
// Note: O(1) space is possible.
|
||||
|
||||
var buf = make([][2]int, 1e5)
|
||||
|
||||
func minFlips(s string) int {
|
||||
backward := buf[:len(s)]
|
||||
|
||||
from0, from1 := 0, 0
|
||||
var alt byte = 0 // alternating byte
|
||||
for i := len(s) - 1; i >= 0; i-- {
|
||||
if s[i]-'0' == alt {
|
||||
from1++
|
||||
} else {
|
||||
from0++
|
||||
}
|
||||
alt = alt ^ 1
|
||||
backward[i] = [2]int{from0, from1}
|
||||
}
|
||||
|
||||
minCost := min(backward[0][0], backward[0][1])
|
||||
from0, from1 = 0, 0
|
||||
for i := range len(s) - 1 {
|
||||
if s[i]-'0' == byte(i%2) {
|
||||
from1++
|
||||
} else {
|
||||
from0++
|
||||
}
|
||||
minCost = min(
|
||||
minCost,
|
||||
from0+backward[i+1][1],
|
||||
from1+backward[i+1][0],
|
||||
)
|
||||
}
|
||||
return minCost
|
||||
}
|
||||
|
||||
var _ = minFlips
|
||||
Loading…
Add table
Add a link
Reference in a new issue