算法——重构字符串使得相邻字符不同
给定一个字符串S,检查是否能重新排布其中的字母,使得两相邻的字符不同。
若可行,输出任意可行的结果。若不可行,返回空字符串。
leetcode
解题思路:
- 首先想想什么样的情况下不能构成可行的字符串,就像植树问题,最大的相同的字符个数一定小于字符串长度加一再除以二,如果超了就肯定会相邻。
- 所以,我们在枚举输出的时候,只要剩下需要输出的字符串一直满足这个条件,就一直能够产生合法的答案。当我们每次输出数量最大的两个字符串的时候,就能够让原来的字符串一直满足条件了。你想嘛,如果每次都输出数量的了,那么数量大的不就肯定会超过半数了。
这里利用了优先队列,让数量多的字符排在对头。
class Solution {public String reorganizeString(String s) {int n = s.length();if(n < 2) return s;// 通过数组对字符串的字符进行计数int[] cnt = new int[26];int maxCnt = 0;for(char c : s.toCharArray()) {cnt[c - 'a'] ++;}for(int i : cnt) {maxCnt = Math.max(maxCnt, i);}if(maxCnt > (n + 1) / 2) return "";// 构造优先队列PriorityQueue<Character> q = new PriorityQueue<>((a, b) -> cnt[b - 'a'] - cnt[a - 'a']);// 填入优先队列for(int i = 0; i < 26; i++) {if(cnt[i] > 0) q.offer((char)(i + 'a'));}StringBuilder res = new StringBuilder();while(q.size() > 1) {// 每次提取两个数量最多的字符char a = q.poll();char b = q.poll();res.append(a);res.append(b);cnt[a - 'a'] --;cnt[b - 'a'] --;if(cnt[a - 'a'] > 0) q.offer(a);if(cnt[b - 'a'] > 0) q.offer(b);}// 最后可能还剩下一个if(q.size() > 0) res.append(q.poll());return res.toString();}
}
算法——重构字符串使得相邻字符不同相关推荐
- 【字符串处理算法】最长连续字符及其出现次数的算法设计及C代码实现
一.需求描述 输入一个字符串,编写程序找出这个字符串中的最长连续字符,并求出其连续出现的次数. 例如,"123444445"中的最长连续字符是4,其连续出现的次数为5:" ...
- 【小米笔试题】实现一个算法,确定一个字符串的所有字符是否全部不同
实现一个算法,确定一个字符串的所有字符是否全部不同. 下面给出3种可行方法,都经过测试.(其中方法一,刚开始理解有些困难,需要多思考一下) package XiaoMi;import java.uti ...
- C语言编程>第二十三周 ③ 下列给定程序中,函数fun的功能是:利用插入排序法对字符串中的字符按从小到大的顺序进行排序。插入法的基本算法是:先对字符串中的头两个元素进行排序;然后把第三字符插入
例题:下列给定程序中,函数fun的功能是:利用插入排序法对字符串中的字符按从小到大的顺序进行排序.插入法的基本算法是:先对字符串中的头两个元素进行排序:然后把第三字符插入到前两个字符中,插入后前三个字 ...
- 777. 在LR字符串中交换相邻字符
777. 在LR字符串中交换相邻字符 在一个由 'L' , 'R' 和 'X' 三个字符组成的字符串(例如"RXXLRXRXL")中进行移动操作.一次移动操作指用一个"L ...
- 请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。
请实现一个算法,确定一个字符串的所有字符是否全都不同.这里我们要求不允许使用额外的存储结构. 给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,False代 ...
- 请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。 给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,False代
请实现一个算法,确定一个字符串的所有字符是否全都不同.这里我们要求不允许使用额外的存储结构. 给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,False代 ...
- 请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构
**请实现一个算法,确定一个字符串的所有字符是否全都不同.这里我们要求不允许使用额外的存储结构. 给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,Fals ...
- 【面试经典题之字符串】实现一个算法,确定一个字符串的所有字符是否全都不同。假设不允许使用额外的数据结构
实现一个算法,确定一个字符串的所有字符是否全都不同.假设不允许使用额外的数据结构. 解题: 首先我们假设这个字符串中全都是ASCII字符(如果不是需要另外讨论了).因为ASCII字符集中总共有256个 ...
- 实现一个算法,确定一个字符串的所有字符是否全都不同?
实现一个算法,确定一个字符串的所有字符是否全都不同? 解法 Python算法实现 代码测试 解法 构建一个布尔值的数组,索引值i对应的标记指示该字符串是否含有字母表第i个字符.若这个字符第二次出险,则 ...
- Java实现 LeetCode 777 在LR字符串中交换相邻字符(分析题)
777. 在LR字符串中交换相邻字符 在一个由 'L' , 'R' 和 'X' 三个字符组成的字符串(例如"RXXLRXRXL")中进行移动操作.一次移动操作指用一个"L ...
最新文章
- 超级队长VR线下体验店落地上海,让娱乐突破想象
- PowerShell2.0之Windows排错(一)启动故障排错
- Spring Boot实现监控linux-cpu和内存使用情况,并发送邮件
- 《玩转微信6.0》一1.2 微信初体验
- 小师妹学JavaIO之:NIO中那些奇怪的Buffer
- 如何知道一个域名是否存在_域名检测API实现查看一个域名在微信中是否被封
- ajax同步和异步的区别_同步电机和异步电机区别
- 使用node中的express解决vue-cli加载不到dev-server.js的问题
- 客户端用java api 远程操作HDFS以及远程提交MR任务(源码和异常处理)
- [IE编程] IE8的SDK 下载
- Linux--vmlinuz、vmlinux、initrd
- BT656跟BT1120和BT709有什么区别
- 此beta版已额满_《魔域口袋版》福利狂欢:现金红包天天送 魔石神器免费拿
- 瑞萨开发板编译和烧录
- 1.1 项目经理是干什么的
- 短信验证码被盗刷了怎么办?
- ATTCK靶场系列(七)
- WWW相关概念的学习
- 修改vscode终端字体
- 主机屋免费服务器 – 真的开启服务器免费时代?