42.有效的字母异位词

题目

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;
}
posted @   庄子游世  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
历史上的今天:
2018-12-18 并发编程(上)
点击右上角即可分享
微信分享提示