本文共 1595 字,大约阅读时间需要 5 分钟。
给你一个二进制字符串 binary ,它仅有 0 或者 1 组成。你可以使用下面的操作任意次对它进行修改:
请你返回执行上述操作任意次以后能得到的 最大二进制字符串 。如果二进制字符串 x 对应的十进制数字大于二进制字符串 y 对应的十进制数字,那么我们称二进制字符串 x 大于二进制字符串 y 。
输入:binary = “000110”
输出:“111011” 解释:一个可行的转换为: “000110” -> “000101” “000101” -> “100101” “100101” -> “110101” “110101” -> “110011” “110011” -> “111011”
先上个图:
class Solution { public String maximumBinaryString(String binary) { char[] chars = binary.toCharArray(); int length = chars.length; int[] z = new int[length]; int j = 0; //记录0的位置 for (int i = 0; i < length; i++) { if (chars[i] == '0') { z[j++] = i; } } for (int i = 0; i < j - 1; i++) { //00->10 if (z[i] + 1 == z[i + 1]) { chars[z[i]] = '1'; } else { // 0111……10可以直接变1011……11 chars[z[i]] = '1'; chars[z[i + 1]] = '1'; z[i + 1] = z[i] + 1; chars[z[i + 1]] = '0';// 0记录变更 } } return new String(chars); }}
转载地址:http://wrjzz.baihongyu.com/