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

答案2022-01-24:

时间紧。具体见代码。

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

package main

import (
"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 := 0
for _, task := range str {
cnts[task][1]++
maxCount = getMax(maxCount, cnts[task][1])
}
maxKinds := 0
for 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 := 0
for ; i < 256 && cnts[i][1] == maxCount; i++ {
for j := 0; j < maxCount; j++ {
ans[j] += fmt.Sprintf("%c", cnts[i][0])
}
}
out := 0
for ; 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 - maxKinds
spaces := 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. MFC 中 删除一个非空文件夹

    MFC中提供了删除文件夹的一个封装函数 RemoveDirectory(LPCTSTR lpPathName),我们只要把要删除的文件夹的路径传进去就可以删除了,貌似一切如此简单.我象征性的建立一个文 ...

  2. Idea中包内中的置文件如何发布到编译后的目录中去

    1.问题引入: 运行一个maven+springmvc+hibernate的项目的时候出现了下边的错误: Caused by: java.io.FileNotFoundException: class ...

  3. JS中if判断 非空即为真 非0即为真

    1.字符串参与判断时:非空即为真判断字符串为空的方法if(str!=null && str!=undefined && str !='')可简写为if(!str){   ...

  4. [LeetCode] 862. Shortest Subarray with Sum at Least K 和至少为K的最短子数组

    Return the length of the shortest, non-empty, contiguous subarray of A with sum at least K. If there ...

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

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

  6. [Swift]LeetCode862. 和至少为 K 的最短子数组 | Shortest Subarray with Sum at Least K

    Return the length of the shortest, non-empty, contiguous subarray of A with sum at least K. If there ...

  7. C语言:将ss所指字符串中所有下标为奇数位上的字母转换成大写,若不是字母,则不转换。-删除指针p所指字符串中的所有空白字符(包括制表符,回车符,换行符)-在带头结点的单向链表中,查找数据域中值为ch的结点,找到后通过函数值返回该结点在链表中所处的顺序号,

    //将ss所指字符串中所有下标为奇数位上的字母转换成大写,若不是字母,则不转换. #include <stdio.h> #include <string.h> void fun ...

  8. C语言:假定输入的字符串只包含字母和*号,fun函数:除了尾部的*号以外,将字符的其他*号进行全部删除,形参p已经指向字符串中最后一个字母。-利用折半查找整数m在有序数组中的位置,若找到,返回下标值,否则返回-1。

    //假定输入的字符串只包含字母和*号,fun函数:除了尾部的*号以外,将字符的其他*号进行全部删除,形参p已经指向字符串中最后一个字母. #include <stdio.h> void f ...

  9. Day_11【集合】扩展案例2_使用普通for循环获取集合中索引为3的元素并打印,统计集合中包含字符串"def"的数量,删除集合中的所有字符串",将集合中每个元素中的小写字母变成大写字母def",

    分析以下需求,并用代码实现 1.定义ArrayList集合,存入多个字符串"abc" "def" "efg" "def" ...

  10. Visual Studio 2017中使用正则修改部分内容 如何使用ILAsm与ILDasm修改.Net exe(dll)文件 C#学习-图解教程(1):格式化数字字符串 小程序开发之图片转Base64(C#、.Net) jquery遍历table为每一个单元格取值及赋值 。net加密解密相关方法 .net关于坐标之间一些简单操作

    Visual Studio 2017中使用正则修改部分内容   最近在项目中想实现一个小工具,需要根据类的属性<summary>的内容加上相应的[Description]特性,需要实现的效 ...

随机推荐

  1. 【攻防世界】web练习区write up

    目录: view_source robots backup cookie disabled button weak auth simple php xff referer webshell get p ...

  2. k8s namespace kubeDNS

    图中kube-dns只是一个service,但是他对外提供k8s集群内部的dns服务,真正的dns server,是 coredns这几个pod k8s namespace 的作用只是提供逻辑上的组件 ...

  3. baodoumi mybaitplus自增很大问题

    参考: https://blog.csdn.net/u012019209/article/details/124585933 @TableId(type = IdType.AUTO) private ...

  4. windows2003 的安装以及安装时遇到的问题

    windows2003 的安装以及安装时遇到的问题 简介:Windows Server 2003是微软于2003年3月28日发布的基于Windows XP/NT5.1开发的服务器操作系统,并在同年4月 ...

  5. LeetcodePractice-数组

    目录 88. 合并两个有序数组 思路解析 字节&1. 两数之和 思路解析 腾讯&15. 三数之和 思路解析 18. 四数之和 思路解析 解释下,tmpSum为什么用int不行,需要用i ...

  6. mac快捷键和win10快捷键和mma快捷手册

    不定期更新 来自知乎,b站等 mac下的快捷键 如果你mac接了个不一致的键盘,mac会让你检测,(按左ctrl右边的键,按右ctrl左边的键),之后会进行键位映射,这也太复杂了,我拒绝记录. com ...

  7. XCode汇编调试

    开启Xcode汇编调试 选中Always Show Disassembly项. XCode -> Debug -> Debug Workflow -> Always Show Dis ...

  8. 1.HVV介绍

    HVV介绍 1.护网职责划分 红队:打点人员.攻击人员.社工人员 蓝队:监控人员.研判人员.溯源人员 2.护网需要具备的技能 红队: 外围打点能力.漏洞挖掘能力.漏洞分析能力.权限提升能力.权限维持能 ...

  9. CSS3新增选择器(属性选择器、结构伪类选择器、伪元素选择器)

    ​本博文介绍CSS3中新增的选择器,包括属性选择器.结构伪类选择器和伪元素选择器. 1 属性选择器 属性选择器([属性])可以根据元素的属性和属性值来对符合要求的元素进行选择. 属性选择器的基础语法如 ...

  10. 二进制安装Kubernetes(k8s) v1.24.0 IPv4/IPv6双栈 (三主俩从)

    二进制安装Kubernetes(k8s) v1.24.0 IPv4/IPv6双栈 (三主俩从) Kubernetes 开源不易,帮忙点个star,谢谢了 介绍 kubernetes二进制安装 后续尽可 ...