Leetcode: 767 Reorganize String(搬运自Solution)

方法1:以计数排序

直观:

如果我们想不使两个‘a’相邻,很自然写作“aXaXaXaX....”,其中X是一些字母,到目前为止,让我们假设这个任务是可行的(等同于答案不是“”)

让我们将字符串S排序,所以所有的同样种类的字母出现在连续的方格中,然后当按照下列交错的方式写入时,例如S[3],S[0],S[4],S[1],S[5],S[2],相邻的字母永不接触(特定的交错模式是我们在位置1写步长为2,在位置0开始步长为2)

这条规则的例外是如果N是奇数,那么当交错像S[2],S[0],S[3],S[1],S[4],我们也许出现错误如果那里有同样的3个字母相同那么从S[0]或者S[1]开始,为了防止在这个案例中出现这种错误,我们需要确保大多数相同的字母全出现在结尾。

最后,很容易看出如果N是字符串的长度,只要有一些字母的计数超过(N+1)/2,任务就是不可能的。

算法:

找到每个字母的计数,用它来按照计数排列字符串

如果在一些点一些字符串出现的次数超过(N+1)/2,任务就是不可能的

其它情况,交错字符串按照上面的顺序


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值