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

你可能感兴趣的文章
mysql 里对root及普通用户赋权及更改密码的一些命令
查看>>
Mysql 重置自增列的开始序号
查看>>
MySQL 高可用性之keepalived+mysql双主
查看>>
mysql5.6.21重置数据库的root密码
查看>>
MySQL5.6忘记root密码(win平台)
查看>>
mysql5.7 for windows_MySQL 5.7 for Windows 解压缩版配置安装
查看>>
MySQL5.7.18主从复制搭建(一主一从)
查看>>
MySQL5.7.19-win64安装启动
查看>>
mysql5.7性能调优my.ini
查看>>
Mysql5.7深入学习 1.MySQL 5.7 中的新增功能
查看>>
Mysql5.7版本单机版my.cnf配置文件
查看>>
mysql5.7的安装和Navicat的安装
查看>>
mysql5.7示例数据库_Linux MySQL5.7多实例数据库配置
查看>>
MySQL8.0.29启动报错Different lower_case_table_names settings for server (‘0‘) and data dictionary (‘1‘)
查看>>
MySQL8修改密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
查看>>
MySQL8找不到my.ini配置文件以及报sql_mode=only_full_group_by解决方案
查看>>
mysql8的安装与卸载
查看>>
mysqlbinlog报错unknown variable ‘default-character-set=utf8mb4‘
查看>>
mysqldump 导出中文乱码
查看>>
mysqldump备份时忽略某些表
查看>>