字符串的完美度

来源:互联网 发布:python编写gui程序 编辑:程序博客网 时间:2024/04/30 10:42


还是庞果网,又看到一个题目,这个比较简单。


题目详情

我们要给每个字母配一个1-26之间的整数,具体怎么分配由你决定,但不同字母的完美度不同,

而一个字符串的完美度等于它里面所有字母的完美度之和,且不在乎字母大小写,也就是说字母F和f的完美度是一样的。


现在给定一个字符串,输出它的最大可能的完美度。

例如:dad,你可以将26分配给d,25分配给a,这样整个字符串最大可能的完美度为77。


函数头部

C

int perfect(const char *s);

C++

int perfect(const string &s);

java

public static int perfect(String s);


算法描述


算法没什么可说的,比较简单,先把字符串都变成大写或者小写,然后依次找出出现次数最多的字母,然后最多的分26,次多的分25,依次类推,最后求和,算法难度一颗星。。。。


#include <cstdio>#include <cstring>#include <string>#include <algorithm>#include <vector>#include <iostream>using namespace std;struct myclass {  bool operator() (int i,int j) { return (i>j);}} myobject;int howMany(string &str){    if(str.size()==1)    {        str.erase(0,1);        return 1;    }        if(str.size()==0)        return 0;        string::iterator it;    char  cmp=str[0];    int count=0;        for(int i=0;i<str.size();i++)    {        if(cmp==str[i])        {            count++;            str.erase(i,1);            i--;        }    }        return count;}int perfect(const string &s) {    string str=s;    vector<int> charCounts;    int count,i,j;    int perfectNum=0;        transform(str.begin(), str.end(), str.begin(), ::toupper);        do    {        count=howMany(str);        charCounts.push_back(count);    }while(count>0);        sort(charCounts.begin(),charCounts.end(),myobject);        for(i=0,j=26;i<charCounts.size();i++,j--)    {        perfectNum=perfectNum+j*charCounts[i];        //cout << charCounts[i] << " --- ";    }                //cout << endl;    //cout << "perfect Num is " << perfectNum << endl;    return perfectNum;}//start 提示:自动阅卷起始唯一标识,请勿删除或增加。int main(){       cout << perfect("DAddfdafdfhjfaodnDFESSDF") << endl;} //end //提示:自动阅卷结束唯一标识,请勿删除或增加。



原创粉丝点击