博客
关于我
Codeforces Round #652 (Div. 2) B. AccurateLee(思维)
阅读量:714 次
发布时间:2019-03-21

本文共 1122 字,大约阅读时间需要 3 分钟。

给你一个01字符串,你可以删除其中的一些子序列。要求是当遇到1和0这两个连续字符时,可以删掉一个字符。目标是通过删除尽可能多的字符,得到一个最短且字典序最小的字符串。

为了实现这个目标,我们需要找到一个关键的子结构。具体来说,我们必须找到最小位置的1和最大的0。这样,中间可以全部删掉,只保留最小的1和最大的0,并且为了字典序最小,我们只能保留最大的0。

例如,对于字符串"111110000",我们可以发现其中只有一个最小的1和最大的0。因此,我们可以将1和0保留下来,中间的0全部删除,最终得到的字符串为"0"。这既是最短的,也是字典序最小的。

再看一个例子:"1010001010100"。同样地,我们可以找到最小的1(位置1)和最大的0(位置13)。因此,中间全部删除,只保留位置1的1和位置13的0,得到的字符串为"0"。这样既是最短的,也是字典序最小的结果。

因此,我们可以得出结论:只要找到字符串中的最小位置的1和最大的位置的0,就可以将中间的字符全部删除。这样保留了最小的1和最大的0,后者对于字典序最小的重要性尤为突出。

接下来,我们来看具体的实现。首先,我们需要遍历整个字符串,找到最小位置的1,即num1,然后找到最大的位置的0,即num0。如果num1小于num0,说明这个1在0之前,那么这个1后面还没有遇到任何0,这个时候,我们不能删除任何字符,直接返回原字符串。

否则,我们可以删除中间的所有字符。最终,我们可以只保留位置num1处的1,位置num0处的0,以及它们之间的一部分。为了达到最短且字典序最小的效果,我们可以直接输出位置num1处的1以及位置num0处的0之间的字符(包括两者)。具体来说,我们需要先输出位置num1到num0的字符,然后又输出从num1到num0的字符。这可能有些重复,最终我们需要仔细处理这种情况。

在代码实现中,我们可以通过以下方式实现:

  • 遍历字符串,找到所有0的位置,并记录最大的索引num0。
  • 遍历字符串,找到所有1的位置,并记录最小的索引num1。
  • 如果num1大于num0,说明没有0在1之后,无法删减,直接返回字符串。
  • 否则,输出位置num1的字符,然后从num0开始遍历,直到字符串末尾。
  • 这样,我们已经实现了删除中间字符的目标,并且保留了最小的1和最大的0。最终,我们输出了一个最短且字典序最小的字符串。

    通过这种方法,我们解决了问题。并且,我们的逻辑是正确的,因为它简洁且高效。对于大字符串,这种方法的时间复杂度是O(n),非常适合处理大规模输入。

    总的来说,这种方法既能删除多余的字符,又能保证最优的字典序,完全符合题目要求。代码实现简单且有效,适用于各种情况。

    转载地址:http://ciirz.baihongyu.com/

    你可能感兴趣的文章
    MySQL 内核深度优化
    查看>>
    mysql 内连接、自然连接、外连接的区别
    查看>>
    mysql 写入慢优化
    查看>>
    mysql 分组统计SQL语句
    查看>>
    Mysql 分页
    查看>>
    Mysql 分页语句 Limit原理
    查看>>
    MySql 创建函数 Error Code : 1418
    查看>>
    MySQL 创建新用户及授予权限的完整流程
    查看>>
    mysql 创建表,不能包含关键字values 以及 表id自增问题
    查看>>
    mysql 删除日志文件详解
    查看>>
    mysql 判断表字段是否存在,然后修改
    查看>>
    MySQL 到底能不能放到 Docker 里跑?
    查看>>
    mysql 前缀索引 命令_11 | Mysql怎么给字符串字段加索引?
    查看>>
    MySQL 加锁处理分析
    查看>>
    mysql 协议的退出命令包及解析
    查看>>
    mysql 参数 innodb_flush_log_at_trx_commit
    查看>>
    mysql 取表中分组之后最新一条数据 分组最新数据 分组取最新数据 分组数据 获取每个分类的最新数据
    查看>>
    MySQL 命令和内置函数
    查看>>
    MySQL 和 PostgreSQL,我到底选择哪个?
    查看>>
    mysql 四种存储引擎
    查看>>