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.

常规做法:以一个int[256]长度数组计算字符串s,t中每个字符出现的次数,s中出现一次加一,t中出现一次减一。 最后查询数组中所有值,如果均为0则两个字符串是Anagram关系(即字符颠倒后的新字符串) 注意这样做的前提是字符串中的字符均为ASCII,否则256长度不够。(事实上不需要那么多,小写a是97,大写A是65)

public boolean isAnagram(String s, String t) {
    if (s.length() != t.length()) {
        return false;
    }
    int[] map = new int[256];
    for (int i = 0; i < s.length(); i++) {
        map[s.charAt(i)]++;
        map[t.charAt(i)]--;
    }
    for (int i : map) {
        if (i != 0) {
            return false;
        }
    }
    return true;
}

还有一个趣味解法,给a-z中每一个字符分配一个不同的素数。然后把字符串s和字符串t中的每个字符对应的素数相乘。如果他们的乘积相同,则s和t是Anagram关系。