leetcode 767. Reorganize String(重组字符串)
重新排列字符串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);}
相关文章:

leetcode 767. Reorganize String(重组字符串)
重新排列字符串s中的字母,使得任意两个相邻的字母都不相同。 思路: 让相邻字母不同,能想到的办法是先把相同的字母排列, 然后在相同字母的缝隙中插入另一种字母。 比如"aab", 先把"a a"排出来,再…...

java八股文面试[数据结构]——List和Set的区别
List和Set是用来存放集合的接口,并且二者都继承自接接口Collection List 中的元素存放是有序的,可以存放重复的元素,检索效率较高,插入删除效率较低。 Set 没有存放顺序不能存放重复元素检索效率较低,插入删除效率较…...

脑机接口里程碑!一天2篇Nature!
2023年8月23日,《Nature》期刊一口气发表了两项独立的脑机接口方向的研究。 一项来自加州大学旧金山分校华裔科学家张复伦团队,另一项来自斯坦福大学的神经科学家弗朗西斯威利特(Francis Willett)团队。两项研究都旨在帮助那些因脑损伤和疾病而失去语言能…...
C语言strchr函数
描述 strchr函数用于在一个字符串中查找某个字符的第一次出现的位置。 函数的声明: char * strchr(const char *s, int c); 其中,s是要进行查找的字符串,c是要查找的字符。函数返回指向第一次出现字符 c 的指针,如果未找到&…...

Linux下的Shell基础——Shell概述和入门(一)
前言: Shell还是一个功能相当强大的编程语言,易编写、易调试、灵活性强。为了方便后续的学习,我们需要学习在Linux系统下的Shell编程 目录 一、Shell概述 1.Linux 提供的 Shell 解析器有 2. 默认的解析器是 bash 二、Shell 脚本入门 1.脚…...

当你在浏览器中输入了网址访问时产生了哪些技术步骤
当你在浏览器中输入了网址访问时产生了哪些技术步骤 前段时间在知乎上了看一些网络方面的知识,刚好小编自己也是从事这一块的相关工作由对网络方面有一定的了解。今天我们来讲讲,当你在浏览器中输入本站域名并回车后,这背后到底发生来什么事…...

嵌入式Linux人脸检测libfacedetection
人脸检测 此库依赖Opencv,所以首先要移植Opencv到板子上。 笔者使用LVGL搭建了一个界面,界面有些卡顿(主要原因是文件存取较慢),演示效果如下: OpenCV 首先要交叉编译Opencv 参考:https://…...

Hugo托管到Github Pages
Github通过其Github Pages服务可以user、project或organization提供免费快速的静态托管,同时使用Github Actions自动化开发工作流和构建。 1.创建Github仓库 可见性为public。 命名为username.github.io,username为你的Github用户名。 2.添加远程仓库…...

Python经典面试题——在txt里面添加字段和数据
1. 问题: 如何在txt中实现第一行的字段加一个"test",如果第二行开始有数据,在每条数据的最后加"ok" 2.条件 提供的txt文本如下 时间--地区--人口---降雨量----- 20220101--北京--200--0.5----- 20230101--成都--100--0.55----- …...

【观察】打造以AI为导向的基础设施,联想锚定AI算力“主航道”
毫无疑问,人工智能对人类社会来说并不是一项简单的技术革命,它象征着一个时代的到来,如同工业时代之于农业时代一样,会带来天翻地覆的变革,影响人类社会百年、甚至千年的进程。 而AI算力对于推动人工智能应用的重要性毋…...

预防缓存穿透工具类
1. 前言 缓存穿透大家都知道,这里简单过一下 缓存和数据库中都没有的数据,而用户不断发起请求。比如查询id -1 的值 想着很多面向C端的查询接口,可能都需要做一下缓存操作,这里简单写了个自定义注解,将查询结果(包含…...

会员管理系统实战开发教程04-会员开卡
我们已经用3篇篇幅介绍了会员管理的功能,接着就要开发会员的业务。通常我们开通会员之后需要给会员开通会员卡,一个会员可以有多张会员卡。 在数据源设计的时候,像这种一个会员有多张会员卡的,我们称之为一对多的关系,…...

数据结构(2)
冒泡排序: 1.比较相邻的两个元素。如果前一个元素比后一个元素大,则交换两者位置。 2.对每一对相邻元素做相同工作,从第一对元素到最后一对元素,最后的一个元素就是最大的元素。 for(int ia.length-1;i>0;i--){for (int j 0…...

使用ELK(ES+Logstash+Filebeat+Kibana)收集nginx的日志
文章目录 Nginx日志格式修改配置logstash收集nginx日志引入Redis收集日志写入redis从redis中读取日志 引入FilebeatFilebeat简介Filebeat安装和配置 配置nginx转发ES和kibanaELK设置账号和密码 书接上回:《ELK中Logstash的基本配置和用法》 Nginx日志格式修改 默认…...
TDengine server连接遇到的坑
一、TDengine安装 TDengine目前只有linux版本的server端,安装教程参考 https://zhuanlan.zhihu.com/p/302413259 二、TDengine连接 TDengine连接目前支持两种方式,一种是原生连接,该方法的默认端口号为6030;另一种是REST API连…...

什么是NetDevOps
NetDevOps 是一种新兴的方法,它结合了 NetOps 和 DevOps 的流程,即将网络自动化集成到开发过程中。NetDevOps 的目标是将虚拟化、自动化和 API 集成到网络基础架构中,并实现开发和运营团队之间的无缝协作。 开发运营(DevOps&…...
中小金融机构数字化转型最大的挑战是什么?
中国银保监会办公厅印发的《关于银行业保险业数字化转型的指导意见》强调,银行保险机构要加强顶层设计和统筹规划,科学制定数字化转型战略,统筹推进工作,并从战略规划与组织流程建设、业务经营管理数字化、数据能力建设、科技能力…...

Facebook HiPlot “让理解高维数据变得容易”
在这个全球信息化的时代,数据量呈爆炸式增长,数据的复杂性也是如此。如何有效地处理高维数据并找到隐藏在其中的相关性和模式是一个严峻的挑战。近年来,可视化和可视化分析已被应用于该任务,并取得了一些积极成果。Facebook的新Hi…...
【python】:python新设备环境移植(requirements.txt)
环境移植 condapip conda 你可以使用conda命令来创建一个包含所有已安装包的requirements.txt文件,并将其复制到新电脑上。然后,你可以在新电脑上使用pip命令来安装这些包及其依赖项。 以下是一个示例命令: conda list --export > requ…...

分类预测 | MATLAB实现1D-2D-CNN-GRU的多通道输入数据分类预测
分类预测 | MATLAB实现1D-2D-CNN-GRU的多通道输入数据分类预测 目录 分类预测 | MATLAB实现1D-2D-CNN-GRU的多通道输入数据分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 结合1D时序-2D图像多模态融合的CNN-GRU故障识别算法,基于一维时序信号和二维图…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...

无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...

ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...

免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...

mac:大模型系列测试
0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何,是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试,是可以跑通文章里面的代码。训练速度也是很快的。 注意…...

高考志愿填报管理系统---开发介绍
高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发,采用现代化的Web技术,为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## 📋 系统概述 ### 🎯 系统定…...