LeetCode in Kotlin

1888. Minimum Number of Flips to Make the Binary String Alternating

Medium

You are given a binary string s. You are allowed to perform two types of operations on the string in any sequence:

Return the minimum number of type-2 operations you need to perform such that s becomes alternating.

The string is called alternating if no two adjacent characters are equal.

Example 1:

Input: s = “111000”

Output: 2

Explanation: Use the first operation two times to make s = “100011”.

Then, use the second operation on the third and sixth elements to make s = “101010”.

Example 2:

Input: s = “010”

Output: 0

Explanation: The string is already alternating.

Example 3:

Input: s = “1110”

Output: 1

Explanation: Use the second operation on the second element to make s = “1010”.

Constraints:

Solution

class Solution {
    fun minFlips(s: String): Int {
        val n = s.length
        val localStr = s + s
        val t = localStr.toCharArray()
        val a = CharArray(n + n)
        val b = CharArray(n + n)
        for (i in 0 until n + n) {
            if (i % 2 == 0) {
                a[i] = '1'
                b[i] = '0'
            } else {
                a[i] = '0'
                b[i] = '1'
            }
        }
        var f = 0
        var sec = 0
        var ans = Int.MAX_VALUE
        for (i in 0 until n + n) {
            if (a[i] != t[i]) {
                f++
            }
            if (b[i] != t[i]) {
                sec++
            }
            if (i >= n) {
                if (a[i - n] != t[i - n]) {
                    f--
                }
                if (b[i - n] != t[i - n]) {
                    sec--
                }
            }
            if (i >= n - 1) {
                ans = Math.min(ans, Math.min(f, sec))
            }
        }
        return ans
    }
}