2022-01-24:K 距离间隔重排字符串。
给你一个非空的字符串 s 和一个整数 k,你要将这个字符串中的字母进行重新排列,使得重排后的字符串中相同字母的位置间隔距离至少为 k。
所有输入的字符串都由小写字母组成,如果找不到距离至少为 k 的重排结果,请返回一个空字符串 “”。
输入: s = “aabbcc”, k = 3。
输出: “abcabc” 。
解释: 相同的字母在新的字符串中间隔至少 3 个单位距离。
力扣358。

答案2022-01-24:

时间紧。具体见代码。

代码用golang编写。代码如下:

package mainimport ("fmt""sort"
)func main() {ret := rearrangeString("aabbcc", 3)fmt.Println(ret)
}func rearrangeString(s string, k int) string {if len(s) < k {return s}str := []byte(s)cnts := make([][]int, 256)for i := 0; i < 256; i++ {cnts[i] = []int{i, 0}}maxCount := 0for _, task := range str {cnts[task][1]++maxCount = getMax(maxCount, cnts[task][1])}maxKinds := 0for task := 0; task < 256; task++ {if cnts[task][1] == maxCount {maxKinds++}}N := len(str)if !isValid(N, k, maxCount, maxKinds) {return ""}ans := make([]string, 0)for i := 0; i < maxCount; i++ {ans = append(ans, "")}sort.Slice(cnts, func(i, j int) bool {return cnts[j][1] <= cnts[i][1]})i := 0for ; i < 256 && cnts[i][1] == maxCount; i++ {for j := 0; j < maxCount; j++ {ans[j] += fmt.Sprintf("%c", cnts[i][0])}}out := 0for ; i < 256; i++ {for j := 0; j < cnts[i][1]; j++ {ans[out] += fmt.Sprintf("%c", cnts[i][0])out = twoSelectOne(out == len(ans)-2, 0, out+1)}}builder := ""for _, b := range ans {builder += b}return builder
}func isValid(N, k, maxCount, maxKinds int) bool {restTasks := N - maxKindsspaces := k * (maxCount - 1)return spaces-restTasks <= 0
}func getMax(a, b int) int {if a > b {return a} else {return b}
}func twoSelectOne(c bool, a int, b int) int {if c {return a} else {return b}
}

执行结果如下:


左神java代码

2022-01-24:K 距离间隔重排字符串。 给你一个非空的字符串 s 和一个整数 k,你要将这个字符串中的字母进行重新排列,使得重排后的字符串中相同字母的位置间隔距离至少为 k。 所有输入的字符串相关推荐

  1. 重复子字符串(给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。)

    给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成.给定的字符串只含有小写英文字母,并且长度不超过10000.   示例 1: 输入: "abab" 输出: True ...

  2. 遍历字符串str1的所有非空子串

    遍历字符串str1的所有非空子串: #include<iostream> #include"string" using namespace std; int main( ...

  3. 关于字符串子串 真子串 非空子串 非空真子串的求解方法

    子串的求解方法 公式:n(n+1)/2 +1 子串是一个字符串中连续的一段,将它抽象为周围有边界的一串字符,如"abcde",你可以把子串"bc"抽象为&quo ...

  4. Latex中参考文献形式改为直接引用bibitem后,正文中引用格式由方括号变为圆括号

    问题描述 使用overleaf编写论文,开始时使用bibliography,后面想要更改参考文献排列.显示方式,没有查询到合适的办法,故选择使用bibitem重写参考文献.重写后,正文中对参考文献的引 ...

  5. 每日感悟-华杉讲解论语-2022/01/24

    子曰:学而时习之,不亦说乎! 论语的第一句!!! 我们很多人对于这句话耳熟能详,但是这句话有着很深的意味,华杉在书中讲:学好这句话,整本书的一半就学会了,第一句学明白了,终身都会学,第一句没学明白,这 ...

  6. 字符串对象数组集合非空判断

    String 字符串 //直接用字符串调用方法 str.isEmpty() 如果为null则会抛出异常 if (StringUtils.isEmpty(str)){// "" 和n ...

  7. sql server2008如果表中已经有很多条记录,再添加一个非空字段

    alter table 表名 add 字段名 类型 not null default('') 转载于:https://www.cnblogs.com/deram/p/5880366.html

  8. 查漏补缺——字符串www.qq.com所有非空子串

    子串与子序列总结了笔记,并分享出来.有问题请及时联系博主:Alliswell_WP,转载请注明出处. (腾讯笔试题)选择题:字符串www.qq.com所有非空子串(两个子串如果内容相同则只算一个)个数 ...

  9. C++ 中判断非空的错误指针

    最近在写网络上的东西,程序经过长时间的运行,会出现崩溃的问题,经过DUMP文件的查看,发现在recv的地方接收返回值的时候,数据的长度异常的大差不多16亿多字节.而查看分配后的char指针显示为错误的 ...

  10. 计算机键盘字母排列知识,电脑知识:键盘上的26个字母为何这样排列,你知道吗?...

    原标题:电脑知识:键盘上的26个字母为何这样排列,你知道吗? 电脑新手练习打字的时候,会不会有这样疑问,为何键盘上的字母是这样排列的,怎么就不能26个字母按照顺序排列呢? 之前有人给出的解释,这样可能 ...

最新文章

  1. 技术圈盛会!腾讯云+社区开发者大会免费报名!
  2. 及时复盘的好处_该如何复盘 先来说说复盘的好处: 复盘的好处简直太多了!就像你学习一样有一个总结的过程,复盘的最直接好处就是增强你的“股感”!在股市... - 雪球...
  3. 关于APK文件反编译方法(图文详解)
  4. 2020计算机科学第五轮评估,2019-2020全国计算机专业大学排名
  5. 2017.5.2AM
  6. 转:VS2005 快捷键
  7. 【引用】URLDownloadToFile_VB下载文件!
  8. 逸管家:别只共享单车,互联网时代还可以共享人才
  9. 如何从应用直接跳转AppStore 电话 短信 邮件
  10. 动易php,动易CMS数据转成dedecms的php程序
  11. Android上层进入recovery流程
  12. 人工智能机器人发展前景,使用/教程/实例
  13. 一、一个月有多少天(Biweekly4)
  14. 拍照识别植物app哪个好?来看看这几个工具
  15. 黄色也要黄的有点品位 图
  16. 给领导敬酒杯子非要低于领导吗?
  17. 下拉刷新及上拉加载更多的ListView
  18. 准备pmp考试第13天
  19. wordpress后台管理(八)外观-小工具:管理常用的DUX主题附带的小工具或wordpress自带的小工具
  20. 电子信息类与计算机类专业,电子信息类专业分类和区分

热门文章

  1. python 变量后加逗号的含义
  2. 老绅士+1,白嫖Wallpaper Engine创意工坊壁纸
  3. 3701汉化包 axure r9_AXURE9最全的WEB设计元件库(分享版).rplib
  4. 如何获取到微信公众号的网址
  5. Sara 老友记 第一季第六集 Joey天天演烂片
  6. 电脑主板详细介绍(细图!!)
  7. msi2lmp不能用,mpi不能连接主机,解决办法看这里
  8. Android Things发布新版本DP7,NXP和树莓派开发板可升级
  9. retained heap shallow heap 区别及介绍
  10. O2O模式有发展前景吗 o2o怎么盈利?