题解 | #字符统计C++#
字符统计
http://www.nowcoder.com/practice/c1f9561de1e240099bdb904765da9ad0
注释很详细,直接上代码
#include <bits/stdc++.h> using namespace std; int main() { string get; while(cin>>get) { int sz=get.size(); map<char, int> mp;//用来存放出现的字符以及其出现的次数 for(int i=0;i<sz;i++) { if(mp.find(get[i])!=mp.end()) { (mp.find(get[i])->second)++; } else mp.insert(pair<char, int> (get[i],1)); } set<int> times;//用来存储当前字符串中字符出现个数的种类 for(auto a:mp) { times.insert(a.second); } string ret;//作为最终的返回值 for(auto b:times) { string factor;//按字典序接收出现重复次数相同的字符串 for(auto a: mp) { if(a.second==b) { factor+=a.first;//按照字典序进行追加 } } //进行逆制,因为此时的输出顺序是从出现个数小的往大的出,最终结果需要逆制, //因此,提前逆制按字典序追加的字符串,最后输出时可以保证输出正确 reverse(factor.begin(), factor.end()); ret+=factor;//把当前结果追加到最终返回值后面 } //将从小到大输出转化为从大到小输出,并保证输出次数相同字符按字典序输出,得到最终返回值 reverse(ret.begin(), ret.end()); cout<<ret<<endl; } return 0; }