Problem D Accepts: 1376 Submissions: 3916 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem Description 度熊所居住的 D 国,是一个完全尊重人权的国度。以至于这个国家的所有人命名自己的名字都非常奇怪。一个人的名字由若干个字符组成,同样的,这些字符的全排列的结果中的每一个字符串,也都是这个人的名字。例如,如果一个人名字是 ACM,那么 AMC, CAM, MAC, MCA, 等也都是这个人的名字。在这个国家中,没有两个名字相同的人。 度熊想统计这个国家的人口数量,请帮助度熊设计一个程序,用来统计每一个人在之前被统计过多少次。 Input 这里包括一组测试数据,第一行包含一个正整数NN,接下来的NN 行代表了 NN 个名字。NN 不会超过100,000100,000,他们的名字不会超过40位. Output 对于每输入的一个人名,输出一个整数,代表这个人之前被统计了多少次。 Sample Input 5 ACM MAC BBA ACM BAB Sample Output 0 1 0 2 1 hashmap使用 用容器来统计字符串的出现次数由输入 我们看到 ACM MCA AMC 不论如何变化 它们排序之后一定是相同的字符串 所以 我们可以不断的更新map中的value值以达到统计每个相同字符串出现的次数 在这里我们没必要担心排序超时问题 总长度才40下面是AC代码import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.Scanner; import javax.security.sasl.SaslClient; public class Main { static Map<String, Integer> map = new HashMap<String, Integer>(); public static void main(String[] args) { // TODO Auto-generated method stub int t; Scanner cin = new Scanner(System.in); t=cin.nextInt(); while((t--)!=0) { String str = cin.next(); char st[] = new char[str.length()]; for(int i=0;i<str.length();i++) { st[i] = str.charAt(i); } Arrays.sort(st); String s = new String(st); if(map.containsKey(s)) { System.out.println(map.get(s)); int value = map.get(s)+1; map.put(s, value); } else{ System.out.println(0); map.put(s, 1); } } } }