当前位置: 首页 > news >正文

太原做网站页面的关于搜索引擎的搜索技巧

太原做网站页面的,关于搜索引擎的搜索技巧,dw网站的滑屏怎么做,广州网站设计报价给你一个二进制字符串 binary ,它仅有 0 或者 1 组成。你可以使用下面的操作任意次对它进行修改: 操作 1 :如果二进制串包含子字符串 "00" ,你可以用 "10" 将其替换。 比方说, "00010"…

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

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

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

示例 1:

输入:binary = "000110"
输出:"111011"
解释:一个可行的转换为:
"000110" -> "000101" 
"000101" -> "100101" 
"100101" -> "110101" 
"110101" -> "110011" 
"110011" -> "111011"

纯思维题,需要在两个对字符串的操作中找到规律。考虑两个操作:

00 -> 10,数字变大了,符合最大二进制字符串的所求。

10 -> 01,数字变小了,那么我们为什么需要这个操作?他的意义是什么?

能够显而易见想到的就是010,通过10 -> 01,虽然单步变小了,但修改后变为001,进而使用00 -> 10,最终得到101,整体是变大的。

观察010 -> 001,操作2的起到的作用是什么?

将1右移,将0连起来,进而能够使用操作1对整体进行扩大。

那么将示例按照这个思路解析:

  • "000110" -> "000101"
  • "000101" -> "000011"  到此已经将所有0连续起来。

继续考虑所有连续的0最终会变成什么?

00 -> 10,0000就会变成1000,再变成1100,再变成1110。即000011 -> 111011。

使用上面的过程多分析几个字符串就能得到规律:

  1. 通过操作2,可以将101010001这种1/0交替的字符串变成100000111这种1...0...1交替的字符串。
  2. 再通过操作1,可以将连续的0,变成仅最后一位为0,其余位为1的字符串。00000 -> 11110。

也就是说,最终得到的最大二进制字符串中,最多只有一个0。

而且这个0的位置可以通过原字符串中1和0出现的次数,以及第一个0出现的位置确定。

以10101001为例:

  • 首先出现0之前的1是不需要改动的。
  • 记录第一个出现0的位置,zero_first = 1。
  • 遍历字符串得到所有0的个数,num = 4。
  • 那么按照上面的分析,原字符串可以变成10000111。
  • 进而变成11110111,剩余0的位置位于下标  zero_first + num -1处。

这里剩余的问题就是严格证明为什么按照这个流程下来得到的数是最大的。

从直觉上,想让字符串变大,就尽可能的让所有字符是1,并且如果有0,0的位置要尽量靠后。上面过程得到的结果正符合这个直觉。

假设最终还有一个数比得到的11110111大,那么这个数中0的位置一定要比11110111靠右,并且这个数一定能在11110111基础上通过操作1和操作2得到。而操作1和操作2中将字符串变大的操作需要至少两个0,而11110111只有1个0,所以不存在这个数。

class Solution {public String maximumBinaryString(String binary) {int first_zero_index = binary.indexOf('0');int zero_count = 0;int length = binary.length();if(first_zero_index < 0){return binary;}for(int i = first_zero_index;i < length;i++){// if(binary.charAt(i) == '0'){//     zero_count++;// }zero_count -= binary.charAt(i) - '1';}return "1".repeat(first_zero_index + zero_count - 1) + "0" + "1".repeat(length - zero_count - first_zero_index);}
}

这里还有一个值得注意的地方,关注代码中注释掉的部分。他们的效率差别会有多大?

            // if(binary.charAt(i) == '0'){//     zero_count++;// }zero_count -= binary.charAt(i) - '1';

原因:

  • 字符比较(binary.charAt(i) == '0')需要将字符转换为数字进行比较,这是一个相对耗时的操作。
  • 字符减法(binary.charAt(i) - '1')直接将字符转换为数字,然后执行减法运算,这是一个更快的操作。

因此,对于长字符串,zero_count -= binary.charAt(i) - '1' 的效率将比 binary.charAt(i) == '0' 高得多。

http://www.zhongyajixie.com/news/45050.html

相关文章:

  • 广州市企业网站制作媒体发稿公司
  • 盐城市政府门户网站建设百度seo快速排名优化
  • 合肥个人做网站app拉新一手渠道
  • 免费网站排名优化建站教程
  • 宁波北仑做公司网站苏州网站制作
  • 校园网站建设标书品牌策划方案范文
  • 模板网站建设公司企业seo优化服务
  • 门户网站有哪些广告公司职位
  • 巴彦淖尔市网站制作seo排名赚app靠谱吗
  • 互联网网站建设制作百度发广告怎么发
  • 手机上怎么做自己卖菜的网站市场策划方案
  • 为什么要给企业建设网站4p 4c 4r营销理论区别
  • c 网站开发数据库品牌建设的五个要素
  • 网页设计教程网页设计培训seo图片优化
  • 哪家做网站性价比高百度推广后台登录页面
  • 调试网站解析域名影响搜索引擎营销的简称是
  • 济南专业网站设计软文营销的特点
  • 微信公众号功能模块网站怎么seo关键词排名优化推广
  • 建立动态网站的作用百度竞价开户流程
  • 房地产销售政策google seo 优化招聘
  • 建设企业网站需要什么seo优化啥意思
  • 华为云上面可以代做网站吗推广关键词优化公司
  • 合肥网站推广 公司百度建立自己的网站
  • 网站如何做即时聊天西安百度快照优化
  • 电商网站设计思路西安优化外
  • 网页设计收获及心得体会株洲seo优化报价
  • 二月网站建设南宁首页优化排名
  • 宝鸡品牌网站建设黄页推广引流
  • 网站建设案例展示seo搜索优化软件
  • 网站域名备案注销深圳网站制作公司