1、
这题用了大顶堆优先队列
pair<int,char>把map里面的数据存起来这样就是最多的在前面(单用map是最小的在前面)
利用ii+2往前走很巧妙
class Solution {
public:
string reorganizeString(string S) {
map<char, int> maps;
for(auto c : S){
maps[c]++;
if(maps[c] > (S.size() + 1) / 2)
return "";
}
priority_queue<pair<int, char>, vector<pair<int, char>>> q;
for(auto m : maps){
q.push({m.second, m.first});
}
string res = S;
int i = 0;
while(!q.empty()){
char c = q.top().second;
int cnt = q.top().first;
q.pop();
while(cnt--){
if(i >= S.size()) i=1;
res[i] = c;
i = i + 2;
}
}
return res;
}
};