[编程题] 字符编码

来源:互联网 发布:网络教育2.5年毕业 编辑:程序博客网 时间:2024/06/01 07:35

请设计一个算法,给一个字符串进行二进制编码,使得编码后字符串的长度最短。
输入描述:
每组数据一行,为待编码的字符串。保证字符串长度小于等于1000。
输出描述:
一行输出最短的编码后长度。
输入例子:
MT-TECH-TEAM
输出例子:
33

#include <iostream>#include <string>#include <map>#include <queue>#include <algorithm>using namespace std;bool cmp(int first,int next){    return first<next;}int main(){    string input;    while(cin>>input){        if(input.empty()==true) continue;        map<char,int> m;        for(int i = 0;i<input.size();i++){            ++m[input[i]];        }        deque<int> dq;        for(map<char,int>::iterator it=m.begin();it!=m.end();it++){            dq.push_back((*it).second);        }        stable_sort(dq.begin(),dq.end(),cmp);        int result =0;        while(dq.size()>1){            int first = dq.front();            dq.pop_front();            int next = dq.front();            dq.pop_front();            result+=first+next;            dq.push_back(first+next);            stable_sort(dq.begin(),dq.end(),cmp);                   }        cout<<result<<endl;    }    return 0;}
原创粉丝点击