1702. 修改后的最大二进制字符串
题目描述
解题思路
binary = “011110”
从左到右遍历,遇到0,则往后找到下一个0,通过10->01的变换,将下一个0之前的如 11110 变为 01111,此时原来的0和01110组成了 001111,可以通过 00 -> 10 的变换 将001111变为 101111。需要注意先将第二个0变为1,再将第一个0变为1,第一个0之后的1变为0。
java
class Solution {
public String maximumBinaryString(String binary) {
char[] toCharArray = binary.toCharArray();
int j = 0;
for (int i = 0; i < toCharArray.length; i ++) {
if(toCharArray[i] == '0') {
while(j <= i || (j < toCharArray.length && toCharArray[j] == '1')) {
j ++;
}
if (j < toCharArray.length) {
toCharArray[j] = '1';
toCharArray[i] = '1';
toCharArray[i + 1] = '0';
}
}
}
return new String(toCharArray);
}
}
kotlin
class Solution {
fun maximumBinaryString(binary: String): String {
var toCharArray = binary.toCharArray()
var j = 0
toCharArray.forEachIndexed { i, c ->
if (c == '0') {
while(j <= i || (j < toCharArray.size && toCharArray[j] == '1')) {
j ++
}
if (j < toCharArray.size) {
toCharArray[j] = '1'
toCharArray[i] = '1'
toCharArray[i + 1] = '0'
}
}
}
return String(toCharArray)
}
}
go
func maximumBinaryString(binary string) string {
charArray := []rune(binary)
j := 0
for i, char := range charArray {
if char == '0' {
for j <= i || (j < len(binary) && charArray[j] == '1') {
j++
}
if j < len(binary) {
charArray[j] = '1'
charArray[i] = '1'
charArray[i+1] = '0'
}
}
}
return string(charArray)
}