Your Java code doesn't reproduce the
C++
code behaviour.
Try the followng (please note my
Java
is rusty, I believe there are more elegant ways to write such code)
import java.util.*;
class MyClass
{
public static Integer largestAnagramSet( String [] arr )
{
Integer maxSize = 0;
Comparator<ArrayList < Integer > > alComparator = new Comparator<ArrayList< Integer> >()
{
@Override public int compare( ArrayList< Integer> a1, ArrayList <Integer> a2)
{
for ( int n = 0; n < a1.size(); ++n)
if ( a1.get(n) > a2.get(n))
return 1;
else if ( a1.get(n) < a2.get(n) )
return -1;
return 0;
}
};
Map < ArrayList< Integer >, Integer > count = new TreeMap < ArrayList < Integer >, Integer>(alComparator) ;
Integer occurrences;
for ( int i = 0; i < arr.length; ++i)
{
ArrayList < Integer > freq = new ArrayList< Integer>();
for (int j = 0; j < 26; ++j)
freq.add(0);
for (int j=0; j<arr[i].length(); ++j)
{
int index = arr[i].charAt(j) -'a';
freq.set(index, freq.get(index) + 1);
}
occurrences = 0;
if ( count.containsKey( freq) )
{
occurrences = count.get(freq);
}
++occurrences;
count.put( freq, occurrences);
if ( maxSize < occurrences )
maxSize = occurrences;
}
return maxSize;
}
public static void main(String [] arg)
{
String [] arr = { "ant", "magenta", "magnate", "tan", "gnamate" };
System.out.println( largestAnagramSet(arr).toString());
String arr1[] = { "cars", "bikes", "arcs", "steer" };
System.out.println( largestAnagramSet(arr1).toString());
}
}