242. Valid Anagram - jiejackyzhang/leetcode-note GitHub Wiki

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?

String类题目。

##Approach 1: sort 先将两个字符串排序,然后比较是否相等。

public class Solution {
    public boolean isAnagram(String s, String t) {
        if(s.length() != t.length()) return false;
        char[] s1 = s.toCharArray();
        char[] s2 = t.toCharArray();
        Arrays.sort(s1);
        Arrays.sort(s2);
        return Arrays.equals(s1, s2);
    }
}

##Approach 2: Hash Table 若仅有ASCII码,则可定义一个长度为26的数组,下标为char-‘a’。 否则,更通用的解法为定义一个hash table。

public class Solution {
    public boolean isAnagram(String s, String t) {
        if(s.length() != t.length()) return false;
        HashMap<Character, Integer> ht = new HashMap<Character, Integer>();
        for(int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);
            ht.put(ch, ht.containsKey(ch) ? ht.get(ch)+1 : 1);
        }
        for(int i = 0; i < t.length(); i++) {
            char ch = t.charAt(i);
            if(!ht.containsKey(ch)) {
                return false;
            } else {
                ht.put(ch, ht.get(ch)-1);
                if(ht.get(ch) == 0) {
                    ht.remove(ch);
                }
            }
        }
        return true;
    }
}
public class Solution {
    public boolean isAnagram(String s, String t) {
        if(s.length() != t.length()) return false;
        int[] map = new int[26];
        for(char c : s.toCharArray()) {
            map[c-'a']++;
        }
        for(char c : t.toCharArray()) {
            if(map[c-'a'] == 0) return false;
            map[c-'a']--;
        }
        return true;
    }
}