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);
    }
}