LeetCode: String Anagrams

Problem statements:

Examples:

Constraints:

Solution Approach:

Solution:

1. Using integer array to count frequency (Time: O(n), Space: O(1))

    public boolean isAnagramArrSol(String s, String t) {
        if(s == null || t == null || s.length() != t.length()) return false;

        int[] fr = new int[26];

        // update frequency of chars
        for(char c: s.toCharArray()) {
            ++fr[c - 'a'];
        }

        // match frequency
        for(char c: t.toCharArray()) {
            --fr[c - 'a'];
        }

        for(int i = 0; i < fr.length; i++) {
            if(fr[i] != 0) return false;
        }

        return true;
    }

2. Using HashMap to count frequency (Time: O(n), Space: O(1))

    public boolean isAnagramMapSol(String s, String t) {
      if(s == null || t == null || s.length() != t.length()) return false;

      Map<Character, Integer> map = new HashMap<>();
      for(char c: s.toCharArray()) {
            map.put(c, map.getOrDefault(c, 0) + 1);
      }

      for(char c: t.toCharArray()) {
            Integer v = map.get(c);
            if(v == null) {
                return false;
            } else {
                if (v > 1) {
                    map.put(c, v - 1);
                } else {
                    map.remove(c);
                }
            }
      }
      return map.isEmpty();
    }

3. Using Sorting (Time: O(n log n), Space: O(1))

    public boolean isAnagramSortSol(String s, String t) {
        if(s == null || t == null || s.length() != t.length()) return false;

        char[] sArray = s.toCharArray();
        char[] tArray = t.toCharArray();

        Arrays.sort(sArray);
        Arrays.sort(tArray);

        return Arrays.equals(sArray, tArray);
    }

------ End ------