解题思路
合法形态至多由一段连续的 0 与一段连续的 1 组成,因此一定可以写成 0∗1∗ 或 1∗0∗(整串同色是这两种的特例)。
- 枚举分界位置 p(0≤p≤n),把前 p 个位置改成同一种字符、后 n−p 个改成另一种字符。
- 用前缀和在 O(1) 内计算两种改法的代价:f01(p) 表示前缀改成 0、后缀改成 1 的翻转次数,f10(p) 则对调两种字符。
- 答案为所有 p 上 f01(p) 与 f10(p) 的最小值。该过程本质是前缀和 + 枚举分界,线性扫描即可。
常见假解包括:只把整串改成全 0 或全 1;或者只考虑 0∗1∗ 而漏掉 1∗0∗。