G - 小明不希望太简单
贪心选择当前最多的字符,如果和上一个选择的为同一个字符,就去选择次最多的字符。
时间复杂度:O(26*n)
只是选择当前最多的字符时,记录最大变量初始化为 ‘a’,比较容易出错,比如数据:aaabc
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
signed main()
{
string s;cin>>s;
vector<int> cnt(26);
for(auto &c:s) cnt[c-'a']++;
priority_queue<PII> Q;
for(int i=0;i<26;i++)
if(cnt[i])
Q.push({cnt[i],i});
while(Q.size()>1)
{
auto a=Q.top();Q.pop();
auto b=Q.top();Q.pop();
cout<<char('a'+a.second)<<char('a'+b.second);
a.first--;
b.first--;
if(a.first) Q.push(a);
if(b.first) Q.push(b);
}
if(!Q.empty()) cout<<char('a'+Q.top().second);
return 0;
}