题解 | #名字的漂亮度#
名字的漂亮度
http://www.nowcoder.com/practice/02cb8d3597cf416d9f6ae1b9ddc4fde3
S1:统计每个字符的出现频率,存在一个长度26的int数组 S2:对上述数组进行排序,升序排列 S3:构造一个长度26的权重向量保证高频字符拥有最高权重
#include
using namespace std;
int main() { int n; string data; int weight[26]; int beauty; int len; int tmp; //构造一个从小到大的权重矩阵 for(int i=0;i<26;i++) { weight[i]=i+1; }
cin>>n;
while(n>0)
{
beauty=0;
//构造计数矩阵
int counter[26]={0};
cin>>data;
len=data.size();
//cout<<len<<endl;
//统计每个字符出现频率
for(int i=0;i<len;i++)
{
if(data[i]>='A' && data[i]<='Z')
{
tmp=data[i]-'A';
counter[tmp]+=1;
}
else if(data[i]>='a' && data[i]<='z')
{
tmp=data[i]-'a';
counter[tmp]+=1;
}
}
//排序
int j=25;
while(j>0)
{
for(int i=0;i<j;i++)
{
if(counter[i]>counter[i+1])
{
tmp=counter[i];
counter[i]=counter[i+1];
counter[i+1]=tmp;
}
}
j--;
}
//for(int i=0;i<26;i++)
// {
// cout<<counter[i];
// }
//cout<<endl;
//加权重
for(int i=0;i<26;i++)
{
beauty+=counter[i]*weight[i];
}
cout<<beauty<<endl;
n--;
}
return 0;
}
