package data.leetcode.hash;
import java.util.HashMap;
public class Leetcode262 {
/**
*
* : 57 ms, Valid AnagramJava15.39%
* : 41.9 MB, Valid AnagramJava25.98%
*
* @param s
* @param t
* @return
*/
public static boolean isAnagram(String s, String t) {
if (s.length() != t.length()) return false;
HashMap sMap = new HashMap();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
Integer integer = sMap.get(c);
if (integer == null) {
integer = 0;
}
sMap.put(c, ++integer);
}
for (int i = 0; i < t.length(); i++) {
if (sMap.containsKey(t.charAt(i))) {
Integer integer = sMap.get(t.charAt(i));
integer--;
if (integer == 0) {
sMap.remove(t.charAt(i));
} else {
sMap.put(t.charAt(i), integer);
}
} else {
return false;
}
}
return true;
}
/**
* 26
*
* : 4 ms, Valid AnagramJava96.25%
* : 38.1 MB, Valid AnagramJava95.44%
*
*/
public static boolean isAnagram2(String s, String t) {
if (s.length() != t.length())
return false;
int[] freq1 = new int[26];
int[] freq2 = new int[26];
for (int i = 0; i < s.length(); i++)
freq1[s.charAt(i) - 'a']++;
for (int i = 0; i < t.length(); i++)
freq2[t.charAt(i) - 'a']++;
for (int i = 0; i < 26; i++) {
if (freq1[i] != freq2[i])
return false;
}
return true;
}
public static void main(String[] args) {
isAnagram2("aacc", "ccac");//false
isAnagram2("aacc", "caac");//true
}
}