假设我们有一个二进制字符串s。现在假设我们可以使用s的前缀并将其移到后面。然后,找到需要翻转的最小字符数,这样就不会有相同值的连续字符。
因此,如果输入类似于s =“ 10010101111”,则输出将为2,因为我们可以使用前缀“ 10”,然后将其移回字符串为“ 01010111110”,然后将第3和第5位从右翻转到0 (“ 01010101010”)。
让我们看下面的实现以更好地理解-
class Solution: def solve(self, S): ans = N = len(S) s = 0 for i in range(2 * N): s += int(S[i % N]) ^ (i & 1) if i >= N - 1: ans = min(ans, s, N - s) s -= int(S[(i - (N - 1)) % N]) ^ ((i - (N - 1)) & 1) return ans ob = Solution() s = "10010101111" print(ob.solve(s))
"10010101111"输出结果
2