博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
358. Rearrange String k Distance Apart
阅读量:7120 次
发布时间:2019-06-28

本文共 1756 字,大约阅读时间需要 5 分钟。

题目:

Given a non-empty string str and an integer k, rearrange the string such that the same characters are at least distance k from each other.

All input strings are given in lowercase letters. If it is not possible to rearrange the string, return an empty string "".

Example 1:

str = " ", k = 3

Result: "abcabc"

The same letters are at least distance 3 from each other.

Example 2:
str = "aaabc", k = 3

Answer: ""

It is not possible to rearrange the string.

Example 3:
str = "aaadbbcc", k = 2

Answer: "abacabcd"

Another possible answer is: "abcabcda"

The same letters are at least distance 2 from each other.

解答:

//先记录str中的char及它出现在次数,存在count[]里,用valid[]来记录这个char最小出现的位置。    //每一次把count值最大的数选出来,append到新的string后面    public int selectedValue(int[] count, int[] valid, int i) {        int select = Integer.MIN_VALUE;        int val = -1;        for (int j = 0; j < count.length; j++) {            if (count[j] > 0 && i >= valid[j] && count[j] > select) {                select = count[j];                val = j;            }        }        return val;    }        public String rearrangeString(String str, int k) {        int[] count = new int[26];        int[] valid = new int[26];        //把每个出现了的char的个数记下来        for (char c : str.toCharArray()) {            count[c - 'a']++;        }                StringBuilder sb = new StringBuilder();        for (int i = 0; i < str.length(); i++) {            //选出剩下需要出现次数最多又满足条件的字母,即是我们最应该先放的数            int curt = selectedValue(count, valid, i);            //如果不符合条件,返回“”            if (curt == -1) return "";            //选择好后,count要减少,valid要到下一个k distance之后            count[curt]--;            valid[curt] = i + k;            sb.append((char)('a' + curt));        }                return sb.toString();    }

转载地址:http://hksel.baihongyu.com/

你可能感兴趣的文章
SQL Server 时间戳与时间格式互相转换
查看>>
RabbitMQ入门-Topic模式
查看>>
多线程面试体系列(13):多线程同步内功心法——PV操作下
查看>>
Work
查看>>
[开源]快速构建文件下载,支持文件加密,自定义限速
查看>>
bzoj1724[Usaco2006 Nov]Fence Repair 切割木板*
查看>>
Mac系统搭建java开发环境
查看>>
菜鸟对新技术的一点看法
查看>>
2016年2月23日----Javascript全局变量和局部变量
查看>>
iOS开发基础知识-多线程概念深入浅出
查看>>
论PHP框架设计模式及MVC的缺陷
查看>>
立flag(java)
查看>>
7-38 数列求和-加强版(20 分)
查看>>
python----字典
查看>>
开发环境eclipse for Mac 下的常用快捷键汇总(基本参照Win系,将Ctrl换为Command)
查看>>
tree与GridView交互
查看>>
zz 鸡汤穷三代,励志毁一生
查看>>
小学期实践心得(2)
查看>>
c#获取电脑硬件信息参数说明(CPU篇 Win32_Processor)
查看>>
oracle报错注入的一些函数
查看>>