博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 767. Reorganize String
阅读量:5748 次
发布时间:2019-06-18

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

用backtracing做超时了,代码如下:

class Solution {public:    string res="";        string reorganizeString(string s) {        vector
visited(s.size(),false); string tmp=""; dfs(s,tmp,visited); return res; } void dfs(string s, string tmp, vector
&visited){ if (tmp.size()==s.size()){ res = tmp; return; } for (int i=0;i

 

本题可以用优先队列+Greedy做。

首先对计算每个字母出现个数,根据个数建立优先队列,个数多的在前。每次选取队列前两个字母,这样一定不会有重复字母在一块。建立优先队列的时候,如果某个字母的出现次数比 (s.size()+1)/2 还要大,说明不行,返回""。

优先队列每次push和pop都要log(A),所以时间复杂度为O(nlogA)。A为字母个数

顺便复习一下优先队列排序的写法。

class Solution {public:    struct node{        int count;        char ch;        node(int cnt, char c):count(cnt),ch(c){};        bool operator < (const node &a) const{            if (count==a.count) return ch>a.ch;            return count
count; for (char ch:s) ++count[ch]; priority_queue
q; for (auto x:count){ if (x.second>(s.size()+1)/2) return ""; q.push(node(x.second,x.first)); } string res=""; while (q.size()>=2){ node a=q.top(); q.pop(); node b=q.top(); q.pop(); res.push_back(a.ch); res.push_back(b.ch); if (--a.count>0) q.push(a); if (--b.count>0) q.push(b); } if (q.size()==1) res+=q.top().ch; return res; } };

 

转载于:https://www.cnblogs.com/hankunyan/p/9644375.html

你可能感兴趣的文章
揭开数据中心光模块利润之源
查看>>
物联网想普及 先要跨过这道难关
查看>>
中国大数据公司市场价值排行榜发布
查看>>
云计算、人工智能等关键技术大揭秘
查看>>
博科:vADC管理Web流量为电商业务增速
查看>>
2017,物联网要“搞”大事情
查看>>
Pinterest将推图片搜索应用 方便用户在线购物
查看>>
《交互式程序设计 第2版》一1.4 艺术与交互
查看>>
携手共建大数据学院
查看>>
《深入理解大数据:大数据处理与编程实践》一一2.3 集群分布式Hadoop系统安装基本步骤...
查看>>
《交互式程序设计 第2版》一3.7 将外部数据载入Processing
查看>>
LoadRunner中Action的迭代次数的设置和运行场景中设置
查看>>
【转载】actor 模型的优缺点分析介绍
查看>>
敏捷开发的一些思考--故事拆分(同发csdn)
查看>>
jquery图片时钟
查看>>
把插入的数据自动备份到另一个表中 ~ 语境:本地和服务器自动同步
查看>>
Innodb:如何计算异步/同步刷脏及checkpoint的临界范围
查看>>
如何把命令行下的执行结果保存(二)
查看>>
Lucene5学习之使用Ansj-seg分词器
查看>>
Office无法卸载的最简单解决方法
查看>>