开发者社区> 问答> 正文

遇到一个字符串的问题,求解答。

Tom 又碰到了一道字符串的题目。有一个字符串 s(1<=|s|<=3e5,|s| 为奇数 ),这个字符串只包含 0,1 和字符 '.',这个 '.' 字符可以任意变为 0 或者 1。现在可以通过一些操作来缩短这个字符串,每次操作可以任意选择连续的三个字符,然后将这个连续的三个字符变成出现数量最多的那个字符 ( 比如001变为0,101变为1,1.0可以变为0 也可以变为 1)。通过更改字符 '.',问通过 (|s|-1)/2次操作后最终这个字符串只剩下一个 1 的方案有多少种,答案对1e9+7取模。输入一行字符串 s输出一个数表示方案数。

展开
收起
游客4skzfvnrxrzbi 2021-12-23 16:45:38 541 0
1 条回答
写回答
取消 提交回答
  • 操作次数为 image.png ,1.0.1 长度为 5 就是可以操作 2 次。分别可以把字符串变为 10001 10011 11001 11011,这四种都可以使得最后只剩下 1,所以答案为 4 种。 因为最后是剩下 1 所以我们肯定优先消去 0,dp i,j,k 的含义就是前 i 个字符中把第 j 个字符变成 k 的方案数。把所有数据处理一遍再求一遍最大值即可。

    image.png

    因此:输入:"1.0.1" 输出:4

    2021-12-23 18:36:09
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载