字符串的完美度

来源:互联网 发布:为什么伤心会流泪知乎 编辑:程序博客网 时间:2024/04/30 08:09
题目详情

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

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


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

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


public class perfect {    /*    在数组per[0-25]中存放的是a-z出现的次数    然后对per 进行排序 保证per[0]中的数字最大    最后per[0]*26+per[1]*25....    */    public static void main(String[] per) {        String s = new String("JKazTQMw ");        int a = perfect(s);        System.out.println(a);    }    public static int perfect(String s) {        int[] per = new int[26];        int k = 0;        for (int i = 0; i < s.length() ; i++ ) {            k = cal((int)s.charAt(i));            per[k]++;        }        for (int i = 0; i < per.length ; i++ )            System.out.print(per[i] + " ");                System.out.println("");        per = sort(per);        for (int i = 0; i < per.length ; i++ )            System.out.print(per[i] + " ");        System.out.println("");        int sum = 0;        k = 0;        while (k < 26 && per[k] != 0) {            sum += per[k] * (26 - k);            k++;        }        return sum;    }    //将a放在per[0]    public static int cal (int a) {        if (a >= 65 && a <= 90)            return a - 65;        if (a >= 97 && a <= 122)            return a - 97;        return 0;    }    //冒泡排序 保证最大的数字在数组的起点    public static int[] sort(int[] per) {        int temp = 0;        for (int i = per.length - 1; i >= 0; i--)            for (int j = i - 1; j >= 0; j--)                if (per[i] > per[j]) {                    temp = per[i];                    per[i] = per[j];                    per[j] = temp;                }        return per;    }}






原创粉丝点击