文章
14
粉丝
230
获赞
26
访问
71.2k
思路:
代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
priority_queue<int,vector<int>,greater<int>> q; //升序排列
string str;
while(cin>>str)
{
if(str=="END") break;
map <char,int> m;
map <char,int> ::iterator it;
int len = str.size();
for(int i=0; i<len; i++)
{
char c = str[i];
m[c]++;
}
for(it =m.begin(); it!=m.end(); it++)
q.push(it->second);
int huffman = 0;
if(q.size()==1) //队列的起始长度可能为1,所以需要单独处理
huffman=len;
while(q.size()>1)
{
int t1 = q.top();
q.pop();
int t2 = q.top();
q.pop();
int t3 = t1+t2;
huffman+=t3;
q...
登录后发布评论