博客
关于我
力扣:修改后的最大二进制字符串
阅读量: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/

你可能感兴趣的文章
mysqldump的一些用法
查看>>
mysqli
查看>>
MySQLIntegrityConstraintViolationException异常处理
查看>>
mysqlreport分析工具详解
查看>>
MySQLSyntaxErrorException: Unknown error 1146和SQLSyntaxErrorException: Unknown error 1146
查看>>
Mysql_Postgresql中_geometry数据操作_st_astext_GeomFromEWKT函数_在java中转换geometry的16进制数据---PostgreSQL工作笔记007
查看>>
mysql_real_connect 参数注意
查看>>
mysql_secure_installation初始化数据库报Access denied
查看>>
MySQL_西安11月销售昨日未上架的产品_20161212
查看>>
Mysql——深入浅出InnoDB底层原理
查看>>
MySQL“被动”性能优化汇总
查看>>
MySQL、HBase 和 Elasticsearch:特点与区别详解
查看>>
MySQL、Redis高频面试题汇总
查看>>
MYSQL、SQL Server、Oracle数据库排序空值null问题及其解决办法
查看>>
mysql一个字段为空时使用另一个字段排序
查看>>
MySQL一个表A中多个字段关联了表B的ID,如何关联查询?
查看>>
MYSQL一直显示正在启动
查看>>
MySQL一站到底!华为首发MySQL进阶宝典,基础+优化+源码+架构+实战五飞
查看>>
MySQL万字总结!超详细!
查看>>
Mysql下载以及安装(新手入门,超详细)
查看>>