题解 | #名字的漂亮度#
名字的漂亮度
https://www.nowcoder.com/practice/02cb8d3597cf416d9f6ae1b9ddc4fde3
#include <iostream> #include <map> #include <string> #include <vector> #include <algorithm> using namespace std; struct word_count { public: char a; int number_character; word_count()=default; word_count(char m, int n): a(m),number_character(n) {}; }; bool compare_word(const word_count &a,const word_count &b) { return a.number_character<b.number_character; } int find_character(vector<word_count> & x, char s) { for(int i = 0;i!=x.size();++i) { if(x[i].a == s) { return i; } } return -1; } int maxBeautifulName(string &s) { int r = 0; vector<word_count> a; for(auto &i:s) { int j =find_character(a, i); if(j!=-1) { ++a[j].number_character; } else { word_count temp(i,1); a.push_back(temp); } } sort(a.begin(),a.end(),compare_word); int count = 26; for(auto i = a.rbegin();i!=a.rend();++i) { r+=i->number_character * count; --count; } return r; } int main() { int N; cin>>N; string name; cin.ignore(); for(int i = 0;i!=N;++i) { getline(cin, name); int r = maxBeautifulName(name); cout<<r<<endl; } } // 64 位输出请用 printf("%lld")
这个题的核心是设定一个新的类,包含一个字符,和一个出现次数number。