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

幻昼 2020年04月15日 294次浏览

问题

示例 1:

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

示例 2:

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

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

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

思路

可以只利用一个长度为 26 的字符数组,将出现在字符串 s 里的字符个数加 1,而出现在字符串 t 里的字符个数减 1,最后判断每个小写字母的个数是否都为 0。

代码

public boolean isAnagram(String s, String t) {
        int[] Counts = new int[26];
        for (char ch : s.toCharArray()) {
            //字符转数字小技巧
            Counts[ch - 'a']++;
        }
        for (char ch : t.toCharArray()) {
            Counts[ch - 'a']--;
        }
        for (int i = 0; i < 26; i++) {
            if (Counts[i] != 0) {
                return false;
            }
        }
        return true;
    }