leetcode 767. Reorganize String(重组字符串)

news2024/11/19 5:39:06

在这里插入图片描述
重新排列字符串s中的字母,使得任意两个相邻的字母都不相同。

思路:

让相邻字母不同,能想到的办法是先把相同的字母排列,
然后在相同字母的缝隙中插入另一种字母。
比如"aab", 先把"a a"排出来,再在2个a的缝隙中插入b,得到"aba".

那么就需要统计每个字母出现的次数。
为了让能插入字母的缝隙,排列时中间空一位,也就是先把出现最多的字母放在偶数位,
如果不够放就折回来到奇数位,所以字母出现次数不能超过s长度的一半,
不然折回来就是相同字母了。字母的出现次数超过s一半的直接返回“”。

而且一定要先排出现最多的字母(可以试试example1中先排b)。

可以用一个优先队列按字母出现的次数从大到小排列。然后一一取出排列。
也可以只找到出现次数最多的字母,先排列,再直接按顺序排剩下的。

优先队列:

    public String reorganizeString(String s) {
        HashMap<Character,Integer> map = new HashMap<>();
        char[] chs = s.toCharArray();
        //按字母出现的次数倒序排列
        PriorityQueue<Character> pq = new PriorityQueue<>((a,b)->(map.get(b)-map.get(a)));
        char[] res = new char[s.length()];

        for(char c : chs) {
            map.put(c, map.getOrDefault(c, 0)+1);
        }
        pq.addAll(map.keySet());

        //出现频率最多的字母多于字符串长度的一半
        if(map.get(pq.peek()) > (s.length()+1)/2) return "";
        
        int i = 0;

        while(!pq.isEmpty()) {
            char c = pq.poll();
            for(int j = 0; j < map.get(c); j++) {
                if(i >= s.length()) i = 1;  //偶数位放满,开始放奇数位
                res[i] = c;
                i += 2;
            }
        }
        return new String(res);
    }

只先排出现次数最多的,剩下的按顺序排。此方法更快。

    public String reorganizeString(String s) {
        int[] cnt = new int[26];
        char[] chs = s.toCharArray();
        int n = chs.length;
        char[] res = new char[n];

        for(int i = 0; i < n; i++) cnt[chs[i]-'a']++;

        //找到出现次数最多的字母和次数
        int maxCnt = 0;
        int freqCh = 0;
        for(int i = 0; i < 26; i++) {
            if(cnt[i] > maxCnt) {
                maxCnt = cnt[i];
                freqCh = i;
            }
        }

        if(maxCnt > (n+1)/2) return "";
        //先排出现最多的字母,不然可能会出现奇数位和偶数位是同一字母的情况
        int idx = 0;
        while(cnt[freqCh] > 0) {
            res[idx] = (char)(freqCh + 'a');
            idx += 2;
            cnt[freqCh] --;
        }

        for(int i = 0; i < 26; i++) {
            while(cnt[i] > 0) {
                if(idx >= n) idx = 1;
                res[idx] = (char)(i+'a');
                idx += 2;
                cnt[i] --;
            }
        }
        return new String(res);
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/928055.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python“牵手”拼多多商品列表数据,关键词搜索拼多多API接口数据,拼多多API接口申请指南

拼多多平台API接口是为开发电商类应用程序而设计的一套完整的、跨浏览器、跨平台的接口规范&#xff0c;拼多多API接口是指通过编程的方式&#xff0c;让开发者能够通过HTTP协议直接访问拼多多平台的数据&#xff0c;包括商品信息、店铺信息、物流信息等&#xff0c;从而实现拼…

ssm中小型企业财务管理系统源码和论文

ssm中小型企业财务管理系统源码和论文067 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 1、研究目的意义 社会经济的迅速发展和科学技术的全面进步&#xff0c;计算机技术的飞速发展&#xff0c;以及计算机与…

开启网络安全量化时代丨Fortinet AI 驱动型安全运营方案让价值看得见

网络安全投资如何才能体现价值&#xff0c;一直都是困扰企业安全负责人的头等大事。这关系到企业何时进行网络安全产品的更新换代&#xff0c;又该如何判断是否应新增部署工具、人员或流程&#xff0c;以及已有投资是否值得……诸多关键问题。Fortinet与知名研究机构Enterprise…

python替换—Series.replace()与Series.str.replace()的区别及为何replace()无效的解决方法

文章目录 前言一、Series.replace()方法二、Series.str.replace()方法三、replace()与str.replace() 使用方法的区别四、常见的坑&#xff1a;python中replace方法不起作用 前言 在Pandas中&#xff0c;Series是一个由一维数组表示的DataFrame列&#xff0c;而replace和str.re…

借助流程引擎表单,一举创造高效率办公流程化管理!

办公流程化管理&#xff0c;是很多企业的追求目标和发展愿景。如何实现这一目标&#xff1f;如何让企业内部的数据更好地实现价值&#xff0c;创造辉煌前景&#xff1f;借助流程引擎表单&#xff0c;可以助力企业实现高效率办公&#xff0c;让每一个表单制作场景更为顺畅和高效…

Redis 重写 AOF 日志期间,主进程可以正常处理命令吗?

重写 AOF 日志的过程是怎样的&#xff1f; Redis 的重写 AOF 过程是由后台子进程 bgrewriteaof 来完成的&#xff0c;这么做有以下两个好处。 子进程进行 AOF 重写期间&#xff0c;主进程可以继续处理命令请求&#xff0c;从而避免阻塞主进程子进程带有主进程的数据副本。这里…

Verilog 实现状态机自动售卖机

Verilog 实现状态机自动售卖机 教学视频&#xff1a;https://www.bilibili.com/video/BV1Ve411x75W?p33&spm_id_frompageDriver&vd_source19ae31dff4056e52d2729a4ca212602b 功能需求 使用1元、2元、5元面值的纸币进行支付&#xff0c;获取6元的物品&#xff0c;不设…

天津大数据培训机构 全面分析大数据怎么样?

数字化和信息化时代的发展&#xff0c;推动了大数据的高速发展&#xff0c;在这个大数据时代的浪潮中&#xff0c;越来越多人加入到大数据培训&#xff0c;都希望在大数据培训机构中学习最前沿的知识。 大数据人才行业需求 大数据行业近年来仍然呈现出增长态势&#xff0c;并…

Linux centos7 bash编程小训练

训练要求&#xff1a; 求比一个数小的最大回文数 知识点&#xff1a; 一个数字正读反读都一样&#xff0c;我们称为回文数&#xff0c;如5、11、55、121、222等。 我们训练用bash编写一个小程序&#xff0c;由我们标准输入一个整数&#xff0c;计算机将显示出一个比这个数小…

相对位置关系对排斥能的影响

( A, B )---3*30*2---( 1, 0 )( 0, 1 ) 让网络的输入只有3个节点&#xff0c;AB训练集各由5张二值化的图片组成&#xff0c;让A中有2个1&#xff0c;B中有1个1&#xff0c;且不重合&#xff0c;排列组合&#xff0c;统计迭代次数并排序。 其中有5组数据 构造平均列A 构造平均…

SPI总线协议

简述 SPI协议是一种芯片与芯片之间的通讯&#xff0c;全称是Serial Peripheral Interface SPI通讯采用一主多从模式&#xff0c;产生时钟的一侧称为主机&#xff0c;另一侧称为从机。只有一个主机&#xff08;一般来说可以是微控制器/MCU&#xff09;&#xff0c;但是可以有一…

不要“妖魔化”外包,看完我悟了......

在IT圈子里&#xff0c;经常能看到一个很有意思的现象&#xff0c;对于外包工作&#xff0c;不同看法的网友们常常吵的不可开交。 新人程序员试图从“前辈”的经验中找出答案&#xff0c;以作为自己要不要去外包公司的参考&#xff0c;但往往刷帖无数&#xff0c;却依旧举棋不…

element 下拉组件获取对象

// 选择数据user:[{name:"小白",id:1,money:"100",love:"蛋糕"},{name:"小黑",id:2,money:"200",love:"奶茶"},{name:"小红",id:3,money:"300",love:"烧烤"},] <div><el…

2023年高教社杯数学建模思路 - 案例:ID3-决策树分类算法

文章目录 0 赛题思路1 算法介绍2 FP树表示法3 构建FP树4 实现代码 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 算法介绍 FP-Tree算法全称是FrequentPattern Tree算法&#xff0c;就是频繁模…

Splashtop 荣获“年度远程学习解决方案提供商”奖

在当今时代&#xff0c;远程学习已不仅仅是一种趋势&#xff0c;而且已成为教育框架的重要组成部分&#xff0c;教育机构和公司必须坚持以创新、效率和安全为先导。 Splashtop 从众多科技导向解决方案中脱颖而出&#xff0c;取得了非凡的成绩。我们郑重宣布&#xff0c;Splash…

Windows系统下,将文件夹中文件名字全部复制提取出来

一、使用命令提示符&#xff08;Command Prompt&#xff09;&#xff1a; 1、打开文件夹&#xff0c;确保你所需的文件都在该文件夹中。 2、在文件夹的路径栏中&#xff0c;输入 “cmd” 并按下 Enter 键&#xff0c;以打开命令提示符并将其当前路径设置为所选文件夹的路径。 …

安全测试二:跨站请求伪造漏洞(修改Referer测试)

安全测试二&#xff1a;跨站请求伪造漏洞 使用工具修改Referer测试 使用工具 使用BurpSuite2023&#xff0c;安装教程参考&#xff1a; 下载安装教程 修改Referer测试 如请求地址为&#xff1a;https://www.baidu.com/修改Referer值&#xff0c;实际是修改url中的IP/域名值&…

盖雅工场获评2023年度苏州市服务型制造示范企业(平台)

苏州市工信局公布 2023年度苏州市服务型制造示范企业&#xff08;平台&#xff09;名单 遴选出服务型制造示范企业34家 服务型制造示范平台19个 苏州盖雅信息技术有限公司 “劳动力管理SaaS云平台服务” 获评2023年度苏州市服务型制造示范平台 全市唯一获评的人力资源服务…

初探802.11协议(4)——Wi-Fi QoS

目录 一. QoS引入 二. QoS机制 2.1 IEEE 802.11e 2.1.1 802.11e与WMM 2.1.2 详细说明​ 2.1.2.1 QoS Control 2.1.2.2 TC 2.1.2.3 TS 2.2 WFA QoS Management 2.2.1 MSCS 2.2.2 DSCP​​​​​​​ 三. 影响QoS机制的因素分析 小结 REF 一. QoS引入 由初探802.…

被控诉不正当竞争,李跳跳宣布无限期停更

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 互联网巨头再次推出力作&#xff1a;律师函寄给李跳跳的作者。原因是李跳跳通过无障碍模式帮助用户点击“跳过广告”按钮&#xff0c;给企业的广告投放业务造成了损失。通过屏蔽、过滤腾X浏览器的广…