Check if two strings are anagrams

If two strings are anagrams:

  • Same length
  • Same characters after sorting

Example Input :

  • “eat”, “tea” - anagrams
  • “hello”, “world” - not anagrams

import java.util.Arrays;

public class AnagramCheck {

    public static boolean isAnagram(String s1, String s2) {

        if (s1 == null || s2 == null) return false;

        s1 = s1.replaceAll("\\s+", "").toLowerCase();
        s2 = s2.replaceAll("\\s+", "").toLowerCase();

        if (s1.length() != s2.length()) return false;

        char[] a1 = s1.toCharArray();
        char[] a2 = s2.toCharArray();

        Arrays.sort(a1);
        Arrays.sort(a2);

        return Arrays.equals(a1, a2);
    }

    public static void main(String[] args) {
        System.out.println(isAnagram("eat", "tea"));   // true
        System.out.println(isAnagram("hello", "world")); // false
    }
}

Given an array of strings, group the anagrams together

Input: strs = [“eat”,”tea”,”tan”,”ate”,”nat”,”bat”]

Output: [[“bat”],[“nat”,”tan”],[“ate”,”eat”,”tea”]]

package exercise.arrays;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class GroupAnagrams {

    public static List<List<String>> groupAnagrams(String[] strings) {

        Map<String, List<String>> map = new HashMap<>();

        for (String word : strings) {
            char[] chars = word.toCharArray();
            Arrays.sort(chars);
            String sortedKey = new String(chars);

            map.computeIfAbsent(sortedKey, k -> new ArrayList<>())
                    .add(word);
        }

        return new ArrayList<>(map.values()); // [[eat, tea, ate], [bat], [tan, nat]]
    }

    //using Java8 Streams
    public static List<List<String>> groupAnagramsUsingStreams(String[] strings) {
        Collection<List<String>> values = Arrays.stream(strings).collect(Collectors.groupingBy(
                s -> {
                    char[] chars = s.toCharArray();
                    Arrays.sort(chars);
                    return new String(chars);
                }
        )).values();

        return new ArrayList<>(values);
    }

    public static void main(String[] args) {
        String[] strs = {"eat","tea","tan","ate","nat","bat"};
        System.out.println(groupAnagrams(strs));
    }
}

This site uses Just the Docs, a documentation theme for Jekyll.