【发布时间】:2017-08-20 06:08:24
【问题描述】:
给定一个二进制字符串,即它只包含 0 和 1(0 的数量等于 1 的数量)我们需要通过 交换 一些位使这个字符串成为一个交替字符序列,我们的目标是尽量减少交换次数。
例如,对于字符串“00011011”,最小交换次数为 2,一种方法是:
1) 交换位:00011011 --->> 00010111
2) 交换位(第一次交换后):00010111 --->> 01010101
请注意,如果给定字符串“00101011”,我们可以将其转换为以 0 开头的备用字符串(需要 3 次交换),也可以转换为以 1 开头的备用字符串(需要一次交换 - 第一个和最后一个位)。
所以在这种情况下最少是一次交换。
最终目标是返回给定字符串 1 和 0 的最小交换次数。 最有效的解决方法是什么?
【问题讨论】:
-
您已经尝试过什么解决方法?什么地方出了错?就目前而言,这过于宽泛了。如果您已经有一个可行的解决方案,但效率太低,您应该将其发布在 Code Review 上,以便对您的代码进行审查。
-
嗨,我想不出一个好的策略来解决它,我应该尝试所有可能的交换并检查它是否会导致解决方案吗?好像不太好……