首页 > 试题广场 >

重排字符串

[编程题]重排字符串
  • 热度指数:967 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个长度为 n 的字符串,请你重新排列这个字符串,使其每个相邻的字符都不同。

你可以返回任意一个合法的结果,如果没有合法结果请返回空字符串

数据范围:字符串长度满足 ,字符串中仅包含小写英文字母
示例1

输入

"abcdd"

输出

"adbcd"
示例2

输入

"nowcoder"

输出

"nowcoder"

说明

本身就是合法字符串,无需再排,但返回重排的字符串也是正确的 
示例3

输入

"aaab"

输出

""
package main
import "strings"

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param str string字符串 
 * @return string字符串
*/
func rearrangestring( str string ) string {
    cnt:=map[byte]int{}
    max:=0
    var tar byte
    for _,ch:=range []byte(str){
        cnt[ch]++
        if cnt[ch]>max{
            max=cnt[ch]
            tar=ch
        }
    }
    if len(str)-max<max-1{
        return ""
    }
    ans:=make([]string,max)
    for i,_:=range ans{
        ans[i]=string(tar)
    }
    delete(cnt,tar)
    add:=""
    for k,v:=range cnt{
        add+=strings.Repeat(string(k), v)
    }
    for len(add)>0{
        for i:=0;i<max;i++{
            if len(add)==0{
                break
            }
            ans[i]+=string(add[0])
            add=add[1:]
        }
    }
    return strings.Join(ans,"")
}

发表于 2023-03-29 11:10:13 回复(0)