Skip to content
Rain Hu's Workspace
Go back

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

Rain Hu
class Solution {
public:
    int minFlips(string s) {
        int k = s.size();
        s += s;

        int ans1 = 0, ans2 = 0;
        
        for (int i = 0; i < k; i++) {
            if ((i % 2 == 0 && s[i] != '1') || (i % 2 == 1 && s[i] != '0')) ++ans1;
            if ((i % 2 == 0 && s[i] != '0') || (i % 2 == 1 && s[i] != '1')) ++ans2;
        }
        int ans = min(ans1, ans2);

        for (int i = k; i < s.size(); i++) {
            if ((i % 2 == 0 && s[i] != '1') || (i % 2 == 1 && s[i] != '0')) ++ans1;
            if ((i % 2 == 0 && s[i] != '0') || (i % 2 == 1 && s[i] != '1')) ++ans2;
            
            if (((i - k) % 2 == 0 && s[i - k] != '1') || ((i - k) % 2 == 1 && s[i - k] != '0')) --ans1;
            if (((i - k) % 2 == 0 && s[i - k] != '0') || ((i - k) % 2 == 1 && s[i - k] != '1')) --ans2;

            ans = min({ans1, ans2, ans});
        }

        return ans;
    }
};

Share this post on:

Previous
[LeetCode] 567. Permutation in String
Next
[Leetcode] 14. Longest Common Prefix