package com.itheima;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
public class Test33 {
/*我们要给每个字母配一个1-26之间的整数,
具体怎么分配由你决定,但不同字母的完美度不同,
而一个字符串的完美度等于它里面所有字母的完美度之和,
且不在乎字母大小写,也就是说字母F和f的完美度是一样的。
现在给定一个字符串,输出它的最大可能的完美度。
例如:dad,你可以将26分配给d,25分配给a,
这样整个字符串最大可能的完美度为77
* */
public static void main(String[] args) throws Exception
{
System.out.println("Please Input String:");
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
String line =null;
while((line=bufr.readLine())!=null)
{
Count(line);
}
}
public static void Count(String line)
{
char[] arr = line.toLowerCase().toCharArray();
int count = 0;
TreeMap<Character,Integer> tm = new TreeMap<>();
for(int i=0;i<arr.length;i++)
{
if(!tm.containsKey(arr[i]))
tm.put(arr[i],1);
else
{
count = tm.get(arr[i]);
count++;
tm.put(arr[i],count);
}
}
int[] num = new int[tm.size()];
int t = 0;
Set<Map.Entry<Character,Integer>> entrySet = tm.entrySet();
for(Map.Entry<Character,Integer> me : entrySet)
{
System.out.println(me.getKey()+" : "+me.getValue());
num[t]=me.getValue();
t++;
}
sort(num);
count=0;
for(int i = 26,j=0;j<num.length;i--,j++)
{
count+=num[j]*i;
}
System.out.println("整个字符串最大可能的完美度为:"+count);
}
public static void sort(int[] num)
{
for(int i = 0;i<num.length-1;i++)
{
for(int j = 0;j<num.length-i-1;j++)
{
if(num[j]<num[j+1])
{
int temp = num[j+1];
num[j+1]= num[j];
num[j]=temp;
}
}
}
}
}
|
|