Codeforces Round #726 (Div. 2) E2. Erase and Extend (Hard Version) (贪心 or Z_Function)

题目链接:https://codeforces.com/contest/1537/problem/E2

题目大意:

        有一个长度为n的初始字符串s,由小写字母组成,可以进行如下两种操作:

        1,若s的字符数大于1,可删除s末尾的字符

        2,在s的末尾加上自身,s=s+s

        可以进行无限次上述操作,我们需要得到一个长度为k的字符串,需要让该字符串的字典序最小。(1<=n,k<=5*10^5)

题解:

个人的解法:贪心

        1,若首字符为a,那么目标字符串一定为aaaaaa,我们可以首先构造出仅由s[0]构造的一个方案,寻找比它更优的方案

        2,继续推导,若s[i]>s[0],则s[i]及其后面的字符一定会被删除

        3,剩下的字符,我们首先可以确定,第一个字符后,连续的比它小的字符一定必选。例如:dabcd....,那么dabc这个前缀是必选的。继续推导,若前缀1到i-1的字符必选,且s[i]<s[0],则s[i]必选。

        4,我们如何判断接下来的字符串如何选,我们设s[i]==s[0],且前i个字符必选。设

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值