博客
关于我
力扣:修改后的最大二进制字符串
阅读量:403 次
发布时间:2019-03-05

本文共 1595 字,大约阅读时间需要 5 分钟。

题目描述


给你一个二进制字符串 binary ,它仅有 0 或者 1 组成。你可以使用下面的操作任意次对它进行修改:

  • 操作 1 :如果二进制串包含子字符串 “00” ,你可以用 “10” 将其替换。
    比方说, “00010” -> “10010”
  • 操作 2 :如果二进制串包含子字符串 “10” ,你可以用 “01” 将其替换。
    比方说, “00010” -> “00001”

请你返回执行上述操作任意次以后能得到的 最大二进制字符串 。如果二进制字符串 x 对应的十进制数字大于二进制字符串 y 对应的十进制数字,那么我们称二进制字符串 x 大于二进制字符串 y 。

输入:binary = “000110”

输出:“111011”
解释:一个可行的转换为:
“000110” -> “000101”
“000101” -> “100101”
“100101” -> “110101”
“110101” -> “110011”
“110011” -> “111011”

题目分析


先上个图:

在这里插入图片描述
看图说话,发现一个由 0 和 1 组成的字符串,其中 0 的位置有两种状态,一种是连续的 0 ,一种是由 1 隔开的 , 按照题目的要求将字符串通过两种变化规则使得二进制表示的值最大 。
通过图分析:
1、针对 连续的 0 有,通过操作1,发现 只需要保留连续的最后一个 0 ,其它的位置全部置 1 即可实现二进制值的最大化 ;
2、针对 由 1 隔开的 0 有,通过操作2 ,将 0 和 1 位置的交换,最终 0 会相遇,这时采用一次操作1 ,即可实现二进制最大化; 通过图可发现规律,只需要将 0 所在的位置置 1 , 同时将第一个 0 的下一个位置置 0 即可 ,例如 01110 -> 10111 。
3、通过 1 和 2 , 发现只需要维护一个 数组记录每个 0 在字符串中出现的索引位置 ,然后遍历该数组,按照 1 和 2 的规则进行修改。

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/

你可能感兴趣的文章
Mongodb学习总结(1)——常用NoSql数据库比较
查看>>
MongoDB学习笔记(8)--索引及优化索引
查看>>
mongodb定时备份数据库
查看>>
mppt算法详解-ChatGPT4o作答
查看>>
mpvue的使用(一)必要的开发环境
查看>>
MQ 重复消费如何解决?
查看>>
mqtt broker服务端
查看>>
MQTT 保留消息
查看>>
MQTT 持久会话与 Clean Session 详解
查看>>
MQTT介绍及与其他协议的比较
查看>>
MQTT工作笔记0007---剩余长度
查看>>
MQTT工作笔记0008---服务质量
查看>>
MQTT工作笔记0009---订阅主题和订阅确认
查看>>
Mqtt搭建代理服务器进行通信-浅析
查看>>
MS COCO数据集介绍
查看>>
MS Edge浏览器“STATUS_INVALID_IMAGE_HASH“兼容性问题
查看>>
ms sql server 2008 sp2更新异常
查看>>
MS SQL查询库、表、列数据结构信息汇总
查看>>
MS UC 2013-0-Prepare Tool
查看>>
MSBuild 教程(2)
查看>>