RAV
0
Q:

funWithAnagrams

public class FunWithAnagrams {

    public static boolean areAnagram(String w1, String w2) {
        char[] chr1 = w1.toCharArray();
        char[] chr2 = w2.toCharArray();

        // Sorting the two arrays and checking for equality also works, but this is faster

        int[] count = new int[26];
        for (char ch : chr1) {
            count[ch - 97] = count[ch - 97] + 1;
        }

        for (char ch : chr2) {
            count[ch - 97] = count[ch - 97] - 1;
        }

        for (int n : count) {
            if (n != 0) {
                return false;
            }
        }


        return true;
    }

    public static String key(String word) {
        char[] chrs = word.toCharArray();
        Arrays.sort(chrs);
        return new String(chrs);
    }

    public static List<String> funWithAnagrams(List<String> s) {
        List<String> ans = new LinkedList<String>();
        Set<String> found = new HashSet<String>();
       for (int i=0; i<s.size(); i++) {
            String word = s.get(i);
            String key = key(word);
            if (!found.contains(key)) {
                ans.add(word);
                found.add(key);
            }

        }

        Collections.sort(ans);

        return ans;
    }


    public static void main(String[] args) throws FileNotFoundException {
        //List<String> a = Arrays.asList("code", "doce", "ecod", "framer", "frame");
        List<String> a = Arrays.asList("code", "aaagmnrs", "anagrams", "doce");
        System.out.println(funWithAnagrams(a));
    }

}
0

New to Communities?

Join the community