package com.fishercoder.solutions;

import java.util.Arrays;

/**
 * 242. Valid Anagram
 * Given two strings s and t, write a function to determine if t is an anagram of s.

 For example,
 s = "anagram", t = "nagaram", return true.
 s = "rat", t = "car", return false.

 Note:
 You may assume the string contains only lowercase alphabets.

 Follow up:
 What if the inputs contain unicode characters? How would you adapt your solution to such case?
 */

public class _242 {

    public static class SortingSolution {
        public boolean isAnagram(String s, String t) {
            char[] schar = s.toCharArray();
            char[] tchar = t.toCharArray();
            Arrays.sort(schar);
            Arrays.sort(tchar);
            return new String(schar).equals(new String(tchar));
        }
    }

    public static class CountingSolution {
        public boolean isAnagram(String s, String t) {
            if (s == null || t == null || s.length() != t.length()) {
                return false;
            }
            int[] counts = new int[26];
            for (int i = 0; i < s.length(); i++) {
                counts[s.charAt(i) - 'a']++;
                counts[t.charAt(i) - 'a']--;
            }
            for (int i : counts) {
                if (i != 0) {
                    return false;
                }
            }
            return true;
        }
    }
}

@@ -495,23 +495,16 @@
 ass 
-Sorting
 Solution
  %7B%0A 
@@ -491,32 +491,33 @@
 c class Solution
+1
  %7B%0A        publi
@@ -819,24 +819,16 @@
 ass 
-Counting
 Solution
  %7B%0A 
@@ -823,16 +823,17 @@
 Solution
+2
  %7B%0A     

refactor 242