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

你可能感兴趣的文章
mysql5.7安装
查看>>
mysql5.7性能调优my.ini
查看>>
MySQL5.7新增Performance Schema表
查看>>
Mysql5.7深入学习 1.MySQL 5.7 中的新增功能
查看>>
Webpack 之 basic chunk graph
查看>>
Mysql5.7版本单机版my.cnf配置文件
查看>>
mysql5.7的安装和Navicat的安装
查看>>
mysql5.7示例数据库_Linux MySQL5.7多实例数据库配置
查看>>
Mysql8 数据库安装及主从配置 | Spring Cloud 2
查看>>
mysql8 配置文件配置group 问题 sql语句group不能使用报错解决 mysql8.X版本的my.cnf配置文件 my.cnf文件 能够使用的my.cnf配置文件
查看>>
MySQL8.0.29启动报错Different lower_case_table_names settings for server (‘0‘) and data dictionary (‘1‘)
查看>>
MYSQL8.0以上忘记root密码
查看>>
Mysql8.0以上重置初始密码的方法
查看>>
mysql8.0新特性-自增变量的持久化
查看>>
Mysql8.0注意url变更写法
查看>>
Mysql8.0的特性
查看>>
MySQL8修改密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
查看>>
MySQL8修改密码的方法
查看>>
Mysql8在Centos上安装后忘记root密码如何重新设置
查看>>
Mysql8在Windows上离线安装时忘记root密码
查看>>