Skip to content

Commit 5b298ca

Browse files
authored
Create 1888-minimum-number-of-flips-to-make-the-binary-string-alternating.kt
1 parent 04c8d7f commit 5b298ca

File tree

1 file changed

+78
-0
lines changed

1 file changed

+78
-0
lines changed
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
/*
2+
* O(N) memory
3+
*/
4+
fun minFlips(s: String): Int {
5+
var s2 = s + s
6+
var sb1 = StringBuilder()
7+
var sb2 = StringBuilder()
8+
9+
for (i in 0 until s2.length) {
10+
if (i % 2 == 0) {
11+
sb1.append('1')
12+
sb2.append('0')
13+
} else {
14+
sb1.append('0')
15+
sb2.append('1')
16+
}
17+
}
18+
19+
val alt1 = sb1.toString()
20+
val alt2 = sb2.toString()
21+
var res = s2.length
22+
var diff1 = 0
23+
var diff2 = 0
24+
var left = 0
25+
26+
for (right in 0 until s2.length) {
27+
if (s2[right] != alt1[right])
28+
diff1++
29+
if (s2[right] != alt2[right])
30+
diff2++
31+
if (right - left + 1 > s.length) {
32+
if (s2[left] != alt1[left])
33+
diff1--
34+
if (s2[left] != alt2[left])
35+
diff2--
36+
left++
37+
}
38+
39+
if (right - left + 1 == s.length)
40+
res = minOf(res, diff1, diff2)
41+
}
42+
43+
return res
44+
}
45+
}
46+
47+
/*
48+
* O(1) memory
49+
*/
50+
class Solution {
51+
fun minFlips(s: String): Int {
52+
val n = s.length
53+
var diff1 = 0
54+
var diff2 = 0
55+
var res = n
56+
57+
for (i in 0 until n * 2) {
58+
val sChar = s[i % n]
59+
val is0 = if (i % 2 == 0) '0' else '1'
60+
if (sChar != is0)
61+
diff1++
62+
else
63+
diff2++
64+
65+
if (i >= n) {
66+
val firstCharInWindow = if ((i - n) % 2 == 0) '0' else '1'
67+
if (firstCharInWindow != s[i - n])
68+
diff1--
69+
else
70+
diff2--
71+
72+
res = minOf(res, diff1, diff2)
73+
}
74+
}
75+
76+
return res
77+
}
78+
}

0 commit comments

Comments
 (0)