有效的字母异位词

给定两个字符串 st ,编写一个函数来判断 t 是否是 s 的一个字母异位词。

示例 1:

输入: s = "anagram", t = "nagaram"
输出: true

示例 2:

输入: s = "rat", t = "car"
输出: false

说明:
你可以假设字符串只包含小写字母。

进阶:
如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?

方法一:

这个会超时,扎心!

public boolean isAnagram(String s, String t) {
    if(s.length() != t.length())
        return false;
    for(char str: s.toCharArray();) {
        System.out.println(str);
        int a = (int) s.chars().filter(c -> c == str).count();
        int b = (int) t.chars().filter(c -> c == str).count();
        if(a != b)
            return false;	
    }
    return true;
}

方法二:

这个使用先用排序将字符排好,然后在进行字符串比较。

public boolean isAnagram(String s, String t) {
    if(s.length() != t.length())
        return false;
    char[] s_strs = s.toCharArray();
    char[] t_strs = t.toCharArray();
    Arrays.sort(s_strs);
    Arrays.sort(t_strs);
    String code_s = new String(s_strs);
    String code_t = new String(t_strs);
    if(code_s.compareTo(code_t) == 0) {
        return true;
    }
    return false;
}

方法三:

统计每个字符的个数,然后在比较。和方法一的思路一样。

public boolean isAnagram(String s, String t) {
    if(s.length() != t.length())
        return false;
    int[] s_int = new int[26];
    int[] t_int = new int[26];
    for(char str:s.toCharArray()) {s_int[str-'a']++;}
    for(char str:t.toCharArray()) {t_int[str-'a']++;}
    for(int i = 0; i < 26; i++) {
        if(s_int[i] != t_int[i])
            return false;
    }
    return true;
}