题目详情:
我们要给每个字母配一个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);
?
?
答题说明:
main函数用于方便自行编译,可不完成。
?
?
首先,在做题目之前,我得吐槽一个答题潜规则.
Code 1:
mono,serif;">
- publicclassTest{
- //该数组存放字符串中某个字母出现的次数,如:array[0]表示a的个数,array[1]表示b的个数,其余依此类推
- staticint[]array=newint[26];
- //该变量存放完美度
- staticintsum=0;
-
- publicstaticintperfect(Strings){
- s=s.toLowerCase();
- char[]ch=s.toCharArray();
- for(inti='a';i<='z';i++){
- for(intj=0;j<ch.length;j++){
- if(ch[j]==i){
- array[i-97]++;
- }
- }
- }
- Arrays.sort(array);
- for(inti=0;i<array.length;i++){
- array[i]=array[i]*(i+1);
- sum=array[i]+sum;
- }
- returnsum;
- }
-
- publicstaticvoidmain(String[]args){
- Strings="DAD4538568&^%&^$$$*(\\][[";
- intsum=perfect(s);
- System.out.println(sum);
- }
- }
Code 1在本地测试是正常的,但是为什么提交之后不通过呢? 这就涉及到了一个答题的潜规则:Line03-Line05是不可以定义
全局变量的.
?
?
Code 2:
- publicclassTest{
- publicstaticintperfect(Strings){
- //该数组存放字符串中某个字母出现的次数,如:array[0]表示a的个数,array[1]表示b的个数,其余依此类推
- staticint[]array=newint[26];
- //该变量存放完美度
-
staticintsum=0;
- s=s.toLowerCase();
- char[]ch=s.toCharArray();
- for(inti='a';i<='z';i++){
- for(intj=0;j<ch.length;j++){
- if(ch[j]==i){
- array[i-97]++;
- }
- }
- }
- Arrays.sort(array);
- for(inti=0;i<array.length;i++){
- array[i]=array[i]*(i+1);
- sum=array[i]+sum;
- }
- returnsum;
- }
-
- publicstaticvoidmain(String[]args){
- Strings="DAD4538568&^%&^$$$*(\\][[";
- intsum=perfect(s);
- System.out.println(sum);
- }
- }
像Code 2这样提交一次就可以成功通过提交了.
?
其实还有别的一些答题规则,实在是有些摸不着头脑.