42.有效的字母异位词

发布时间 2023-12-18 18:14:27作者: 庄子游世

题目

42.有效的字母异位词

要求

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

注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。

提示:

  • 1 <= s.length, t.length <= 5 * 104
  • s 和 t 仅包含小写字母

思路

这道题目脑海中的第一个想法就是使用哈希来解决,key 为字符串中的每一个字母,值为字母出现的次数,遍历第一个字符串字母出现了就加一,遍历第二个字符串字母就减一,代码如下:

public boolean isAnagram(String s, String t) {
    Map<Character, Integer> map = new HashMap<>();
    if (s.length() != t.length()) {
        return false;
    }
    char[] sCharArray = s.toCharArray();
    for (char c : sCharArray) {
        map.put(c, map.getOrDefault(c, 0) + 1);
    }
    char[] tCharArray = t.toCharArray();
    for (char c : tCharArray) {
        map.put(c, map.getOrDefault(c, 0) - 1);
    }
    for (Integer value : map.values()) {
        if (value != 0) {
            return false;
        }
    }
    return true;
}

第二个思路不容易想到,要根据提示来,提示是只包含小写字母,那我可以直接声明一个 26 长的数组,这样相对于哈希来说,少了一个 get 操作,思路都是一样,代码如下:

public boolean isAnagram(String s, String t) {
    int[] arr = new int[26];
    if (s.length() != t.length()) {
        return false;
    }
    char[] sCharArray = s.toCharArray();
    for (char c : sCharArray) {
        arr[c - 97] ++;
    }
    char[] tCharArray = t.toCharArray();
    for (char c : tCharArray) {
        arr[c - 97] --;
    }
    for (int i : arr) {
        if (i != 0) {
            return false;
        }
    }
    return true;
}