761. Special Binary String

题意:

一个符合以下两个要求的二进制串:

\(1.串中包含的1和0的个数是相等的。\)

\(2.二进制串的所有前缀中1的个数不少于0的个数\)

被称为特殊二进制串

要求我们任意交换两个相邻的特殊二进制串(可以交换任意次)使得最终得到的序列的字典序最大,并且满足是特殊二进制串。

思路:

我们可以将1看作是上升,0是下降,那么可以这样

然后我们可以找最外层符合要求的子串也就是最底部从水平线开始又降到水平线的段,可以发现找这样的串只要统计一个cnt变量,然后cnt第一次从1变到0就可以找到一段。我们发现这些端除去首首尾,‘1’+str+‘0’,那么我们证明str是以1开头和0结尾的特殊串假设str以1结尾那么‘1’+str 的cnt计数为1,那么去除str最后的1,cnt = 0,那么与选择的串为第一个cnt=0不符,那么假设str首个为0,那么10为第一个cnt = 0所选的字段与当前不符,又前特殊串前后剥去1,0不改变特殊性。

那些段就可以看成是原问题的一个子问题,所以我们就可以递归处理了。由于交换特殊串的时候串的前缀和始终满足要求,所以只要sort下就可以了。

题链

代码:

class Solution
{
public:
string makeLargestSpecial(string S)
{
int len = S.length();
int cnt = 0;
vector<string>str;
int pr = 0;
for(int i = 0;i < len ;i++)
{
if(S[i] == '1')
cnt++;
else cnt--;
if(cnt==0)
{ //printf("%d\n",i);
str.push_back('1' + makeLargestSpecial(S.substr(pr+1,i-pr)) + '0');
pr = i+1;
} }
sort(str.begin(),str.end(),cmp);
string ask = "";
for(int i = 0;i < str.size();i++)
ask += str[i];
return ask;
}
static bool cmp(string a,string b)
{
return a > b;
}
};

leetcode 761. Special Binary String的更多相关文章

  1. 【LeetCode】761. Special Binary String 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/special- ...

  2. 761. Special Binary String

    Special binary strings are binary strings with the following two properties: The number of 0's is eq ...

  3. [LeetCode] Special Binary String 特殊的二进制字符串

    Special binary strings are binary strings with the following two properties: The number of 0's is eq ...

  4. [Swift]LeetCode761. 特殊的二进制序列 | Special Binary String

    Special binary strings are binary strings with the following two properties: The number of 0's is eq ...

  5. 【LeetCode】1023. Binary String With Substrings Representing 1 To N 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  6. 【leetcode】1023. Binary String With Substrings Representing 1 To N

    题目如下: Given a binary string S (a string consisting only of '0' and '1's) and a positive integer N, r ...

  7. #Leetcode# 1016. Binary String With Substrings Representing 1 To N

    https://leetcode.com/problems/binary-string-with-substrings-representing-1-to-n/ Given a binary stri ...

  8. (String) leetcode 67. Add Binary

    Given two binary strings, return their sum (also a binary string). The input strings are both non-em ...

  9. LeetCode 面试:Add Binary

    1 题目 Given two binary strings, return their sum (also a binary string). For example,a = "11&quo ...

随机推荐

  1. Demo02一千以内的水仙花数

    package 习题集2;//1000以内的水仙花数public class Demo02 { public static void main(String[] args) { int i = 100 ...

  2. day13 装饰器与语法糖

    day13 装饰器与语法糖 一.装饰器 1.什么是装饰器 装饰器就是装饰别人的工具,具体是指为被装饰者添加新功能 装饰器->函数 被装饰者->函数 2.为何要用装饰器 装饰器的核心思想:( ...

  3. STM32一些特殊引脚做IO使用的注意事项

    1 PC13.PC14.PC15的使用 这三个引脚与RTC复用,<STM32参考手册>中这样描述: PC13 PC14 PC15需要将VBAT与VDD连接,实测采用以下程序驱动4个74HC ...

  4. jenkins之代码部署回滚脚本

    #!/bin/bash DATE=`date +%Y-%m-%d_%H-%M-%S` METHOD=$1 BRANCH=$2 GROUP_LIST=$3 function IP_list(){ if ...

  5. Spring Cloud中使用Eureka

    一.创建00-eurekaserver-8000 (1)创建工程 创建一个Spring Initializr工程,命名为00-eurekaserver-8000,仅导入Eureka Server依赖即 ...

  6. 一、手把手教你docker搭建fastDFS文件上传下载服务器

    在搭建fastDFS文件上传下载服务器之前,你需要准备的有一个可连接的linux服务器,并且该linux服务器上已经安装了docker,若还有没安装docker的,先百度自行安装docker. 1.执 ...

  7. 【Linux】【Services】任务计划、周期性任务执行

    Linux任务计划.周期性任务执行       未来的某时间点执行一次某任务:at, batch     周期性运行某任务:crontab         执行结果:会通过邮件发送给用户        ...

  8. matplotlib画3d图

    import numpy as npimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3D fig = plt.f ...

  9. MySQL5.7安装教程(亲测有效)

    跟着狂神学java到了数据库阶段了,首先得安装好数据库啊,这里用的是MySQL 压缩包下载:https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5. ...

  10. ANTLR 环境准备

    基本环境: JDK8 Maven IntelliJ IDEA IntelliJ IDEA中安装ANTLR v4插件 在IntelliJ IDEA插件仓库中搜索ANTLR v4插件并安装,如下图: 看个 ...