题解 | #名字的漂亮度# 哈希+排序
名字的漂亮度
https://www.nowcoder.com/practice/02cb8d3597cf416d9f6ae1b9ddc4fde3
#include <iostream> #include <vector> #include <map> #include <algorithm> using namespace std; bool cmp(const pair<char,int>& a, const pair<char,int>& b){ return a.second > b.second; } int main() { int n; cin >> n; for(int i=0; i<n; i++){ string s; cin >> s; int len = s.size(); map<char,int> mp; for(int j=0; j<len; j++){ if(mp.find(s[j]) == mp.end()){ mp[s[j]] = 1; }else { mp[s[j]]++; } } vector<pair<char,int>> tmp(mp.begin(), mp.end()); sort(tmp.begin(), tmp.end(), cmp); int res = 0, len1 = tmp.size(); for(int k=0; k<len1; k++){ res += tmp[k].second * (26-k); } cout << res << endl; } return 0; } // 64 位输出请用 printf("%lld")
分析题目要求得需要用哈希表存储输入字符串中的字母和出现的个数,同时出现个数最多的字母的漂亮度最高,因此引入排序问题。
需要清楚的是自定义cmp函数的时候:1、函数形参一定要采用引用的形式,要不无法操作对象。2、对于两个对象判断的情况,如果返回为true,则第一个形参位于前面,返回false则第一个形参位于后面。