用jva代码解决
时间: 2024-02-13 09:04:44 浏览: 114
以下是用 Java 代码实现的解法:
```java
public static int minCost(String s) {
int n = s.length();
int[] left = new int[n];
int[] right = new int[n];
int cnt0 = 0, cnt1 = 0;
for (int i = 0; i < n; i++) {
left[i] = cnt1;
if (s.charAt(i) == '0') {
cnt0++;
} else {
cnt1++;
}
}
cnt0 = 0;
cnt1 = 0;
for (int i = n - 1; i >= 0; i--) {
right[i] = cnt0;
if (s.charAt(i) == '0') {
cnt0++;
} else {
cnt1++;
}
}
int res = Integer.MAX_VALUE;
for (int i = 0; i < n; i++) {
int cost = i + 1 + n - i - 1 - right[i] - left[i];
res = Math.min(res, cost);
}
return res;
}
```
其中,left 数组记录左边 '1' 的个数,right 数组记录右边 '0' 的个数。在遍历字符串时,我们同时统计出左边和右边的 '0' 和 '1' 的个数,然后就可以根据题目中的公式计算出当前位置的成本了。最后,我们遍历所有位置,并取最小值即可。
需要注意的是,我们在计算成本时,将左边和右边的字符都变成 '0' 或者 '1',这样就可以将所有字符变成出现次数最多的字符了。
阅读全文