2027. Minimum Moves to Convert String

The idea of this solution is if we are on a 'X' we can move the index up by three and add one to res.

An example could be:

input: s = "XXOXXXOOOXOXOXX" (I tried to capture as many edge cases as I could in this test case)

We can start with our index i = 0

s[i] == 'X', so we can skip the next two values (Skip the values at indexes 1 and 2 because according to the problem we have made s[0] = 'O', s[1] = 'O', s[2] = 'O'. We don’t actually change the values because there is no need) and add one to res. So now i = 3, res = 1.

s[i] == 'X', so we can do the same thing as the previous 3 values, and skip the next two values. Now we are at i = 6, res = 2

s[i], s[i + 1], and s[i + 2] are all 'O', so I am just going to skip them.

s[i] == 'X', so we can skip the next two values, and add one to res. i == 12, res = 3.

s[i] == 'O', so i++ and continue. i = 13, res = 3

s[i] == 'X', so we can skip the next two values, i = 15, res = 4

But now i >= len(s), so we can break the loop and return res.

func minimumMoves(s string) int {
    res := 0
    
    for i := 0; i < len(s); i++ {
        if s[i] == 'X' {
            i += 2
            res++
        }
    }
    
    return res
}