刷刷刷Day6|242.有效的字母异位词

242.有效的字母异位词

LeetCode题目要求

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true

解题思路
  • HashMap 记录字符出现次数解法,首先通过 HashMap 记录字符串 s 各个字符出现的次数,再遍历字符串 t 字符时,出现一个字符,就从 HashMap 减去一次,如果减去后的次数小于 0 或字符直接不存在,那么就说明不是异位词

上代码,HashMap 解法

class Solution {
    public boolean isAnagram(String s, String t) {
        // 若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词
        // 根据题目要求,可以通过对 s 中的字符计数,并与 t 的字符计数对比数量,如果各个字符数完全相等,
        // 那么认为是异位词

        if (s.length() != t.length()) {
            return false;
        }

        Map<Character, Integer> countMap = new HashMap<>();
        char[] ss = s.toCharArray();
        for (char c : ss) {
            if (countMap.containsKey(c)) {
                countMap.put(c, countMap.get(c) + 1);
            } else {
                countMap.put(c, 1);
            }
        }
        char[] ts = t.toCharArray();
        for (char c : ts) {
            if (countMap.containsKey(c)) {
                int count = countMap.get(c);
                if (count - 1 < 0) {
                    return false;
                } else {
                    countMap.put(c, count - 1);
                }
            } else {
                return false;
            }
        }
        return true;
    }
}
  • 数组解法,定义 26 长度的 int 数组,数组中首先记录的是从索引 0~26 的每个字符出现的次数,然后根据另一个字符串将出现的次数减去。如果最终数组元素值都等于 0 ,说明是异位词。相比使用 HashMap 来说节省了空间及操作时间

上代码

class Solution {
    public boolean isAnagram(String s, String t) {
        int[] counter = new int[26];
        // 遍历字符串 s, 记录字符出现的次数
        for (int i = 0; i < s.length(); i++) {
            counter[s.charAt(i) - 'a']++;
        }

        // 遍历字符串 t
        for (int i = 0; i < t.length(); i++) {
            counter[t.charAt(i) - 'a']--;
        }

        for (int i = 0; i < counter.length; i++) {
            if (counter[i] != 0) {
                return false;
            }
        }
        return true;
    }
}
重难点

附:学习资料链接

posted @ 2023-01-02 21:23  blacksonny  阅读(14)  评论(0编辑  收藏  举报