1702. 修改后的最大二进制字符串 - 力扣(LeetCode)
给一个二进制字符串,可以做以下操作
- 操作1:把00->10
- 操作2:把10->01
可以无限次上述操作,要求返回修改后最大的字符串
贪心,前面的1越多,数值越大:
- 通过操作2,把后面的0前移,让前面的0尽可能多
- 通过操作1,把集中在一块的0,变为
111...10
(只有最后一位是0)
假设第一个0的位置为x,0的数量为k,最后得到全1数组,只有x+k-1
的位置为0
class Solution {
public String maximumBinaryString(String binary) {
int start = binary.indexOf('0');
if(start==-1) return binary;
int n = binary.length(), k=0;
char[] arr = binary.toCharArray();
for(int i=start; i<n; i++){
if(arr[i]=='0') k++;
arr[i] = '1';
}
arr[start+k-1] = '0';
return new String(arr);
}
}