字符串价值

https://www.nowcoder.com/practice/9240357eefcf4d938b90bdd5eec3712b?tpId=90&tqId=30795&tPage=1&rp=1&ru=%2Fta%2F2018test&qru=%2Fta%2F2018test%2Fquestion-ranking

每次从最大的减一,这里我们用java中自定义的优先队列来实现

import java.util.*;
public class Main {    
    public static int StringValue(String str,int k) {
        int n=str.length();
        int[] alpha=new int[26];
        for(int i=0;i<n;i++) {
            alpha[str.charAt(i)-'a']++;
        }
        PriorityQueue<Integer> pq=new PriorityQueue<>((o1,o2)->{ return o2-o1;});
        for(int i:alpha) {
            if(i!=0)
             pq.add(i);
        }
        int i=0;
        while(i<k) {
            int temp = pq.poll();
            if(temp>1) pq.add(temp-1);
            i++;
        }
        int sum=0;
        while(!pq.isEmpty()) {
            int tmp=pq.poll();
            sum+=tmp*tmp;
        }
        return sum;
    }
    public static void main(String[] args) {
              Scanner scan=new Scanner(System.in);
              String str=scan.nextLine();
              int k=scan.nextInt();
              System.out.println(Main.StringValue(str,k));
    }
}

 

posted @ 2019-05-14 15:26  LeeJuly  阅读(102)  评论(0)    收藏  举报