程式語言 - LeetCode - C++ - 1888. Minimum Number of Flips to Make the Binary String Alternating



參考資訊:
https://algo.monster/liteproblems/1888

題目:


方法:
1. 算出需要翻轉的次數
2. 將s[0]移到尾端
3. 算出需要翻轉的次數(移動後)
4. 全部都移過一次後,找出最小的翻轉次數

解答:

class Solution {
public:
    int minFlips(string s) {
        int r = 0;
        int flip = 0;
        int size = s.size();

        for (int i = 0; i < size; i++) {
            flip += (s[i] != "01"[i & 1]) ? 1 : 0;
        }
        r = min(flip, size - flip);

        for (int i = 0; i < size; i++) {
            if (s[i] != "01"[i & 1]) {
                flip -= 1;
            }

            if (s[i] != "01"[(i + size) & 1]) {
                flip += 1;
            }

            r = min(r, min(flip, size - flip));
        }

        return r;
    }
};