The Java Program: Perm.java
1
2
3
4
5
6
7
8
9
10
11
12 import java.util.List;
13 import java.util.Map;
14 import java.util.Iterator;
15 import java.util.HashMap;
16 import java.util.ArrayList;
17 import java.util.Collections;
18 import java.util.Comparator;
19 import java.util.Scanner;
20 import java.io.*;
21
22 public class Perm {
23 public static void main (final String[] args) {
24 final int minGroupSize = Integer.parseInt (args[0]);
25
26
27 final Map<String,List<String>> m = new HashMap<String,List<String>>();
28
29 final Scanner scan = new Scanner (new BufferedInputStream (System.in));
30
31
32 while (scan.hasNextLine()) {
33 final String word = scan.nextLine();
34 final String alpha = alphabetize (word.toLowerCase());
35 List<String> l = m.get (alpha);
36 if (l==null) m.put (alpha, l=new ArrayList<String>());
37 l.add(word);
38 }
39
40
41 class CompareSize implements Comparator <List<String>> {
42 public int compare (List<String> o1, List<String> o2) {
43 return o2.size() - o1.size();
44 }
45 }
46
47
48 final ArrayList<List<String>> list = new ArrayList<List<String>> ();
49 for (List<String> l: m.values()) {
50 if (l.size() >= minGroupSize) list.add(l);
51 }
52 Collections.sort (list, new CompareSize());
53
54
55 for (List<String> l: list) {
56 System.out.format ("%2d: %s%n", l.size(), l);
57 }
58 }
59
60 private static String alphabetize (final String s) {
61 final int count[] = new int[256];
62 final int len = s.length();
63 for (int i=0; i<len; i++) count[s.charAt(i)]++;
64 final StringBuilder result = new StringBuilder (len);
65 for (char c='a'; c<='z'; c++) {
66 for (int i=0; i<count[c]; i++) result.append(c);
67 }
68 return result.toString();
69 }
70 }