LC每日一题|20240606 - 2938. 区分黑球与白球

89 阅读1分钟

LC每日一题|20240606 - 2938. 区分黑球与白球

桌子上有 n 个球,每个球的颜色不是黑色,就是白色。

给你一个长度为 n 、下标从 0 开始的二进制字符串 s,其中 10 分别代表黑色和白色的球。

在每一步中,你可以选择两个相邻的球并交换它们。

返回「将所有黑色球都移到右侧,所有白色球都移到左侧所需的 最小步数」。

提示:

  • 1 <= n == s.length <= 10^5
  • s[i] 不是 '0',就是 '1'

题目等级:Medium

解题思路

非常简单的一道题~

我们只需要记录0所在的位置,并计算出其归位后所在的位置,然后计算他们到左端的距离和做差即可~

AC代码

class Solution {
    fun minimumSteps(s: String): Long {
        var zero = 0L
        var count = 0
        for (i in s.indices) {
            if (s[i] == '0') {
                zero += i
                count ++
            }
        }
        return zero - (count.toLong() * (count - 1)) / 2
    }
}