博客
关于我
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 基础架构
    查看>>
    MySQL 基础模块的面试题总结
    查看>>
    MySQL 备份 Xtrabackup
    查看>>
    mYSQL 外键约束
    查看>>
    mysql 多个表关联查询查询时间长的问题
    查看>>
    mySQL 多个表求多个count
    查看>>
    mysql 多字段删除重复数据,保留最小id数据
    查看>>
    MySQL 多表联合查询:UNION 和 JOIN 分析
    查看>>
    MySQL 大数据量快速插入方法和语句优化
    查看>>
    mysql 如何给SQL添加索引
    查看>>
    mysql 字段区分大小写
    查看>>
    mysql 字段合并问题(group_concat)
    查看>>
    mysql 字段类型类型
    查看>>
    MySQL 字符串截取函数,字段截取,字符串截取
    查看>>
    MySQL 存储引擎
    查看>>
    mysql 存储过程 注入_mysql 视图 事务 存储过程 SQL注入
    查看>>
    MySQL 存储过程参数:in、out、inout
    查看>>