[算法][力扣242]有效的字母异位词

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

示例 1:

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

输出: true

示例 2:

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

输出: false

解法一:排序后对比

java 复制代码
public class Test_validAnagram {

    public static void main(String[] args) {
        String s = "anagram";
        String t = "nagaram";
        boolean ret = validAnagram(s, t);
        System.out.println(ret);
    }

    public static boolean validAnagram(String s1, String s2) {
        char[] chars1 = s1.toCharArray();
        char[] chars2 = s2.toCharArray();

        Arrays.sort(chars1);
        Arrays.sort(chars2);

        return Arrays.equals(chars1, chars2);
    }
}

解法二:使用HashMap统计每次字符出现的次数

java 复制代码
public class Test_validAnagram2 {

    public static void main(String[] args) {
        String s = "anagram";
        String t = "nagaraam";
        boolean ret = validAnagram(s, t);
        System.out.println(ret);
    }

    public static boolean validAnagram(String s1, String s2) {
        char[] chars1 = s1.toCharArray();
        char[] chars2 = s2.toCharArray();

        // 用 HashMap 来记录字符串 s1 中出现的字符的次数
        HashMap<Character, Integer> record = new HashMap<>();
        for (char ch : chars1) {
            record.put(ch, record.getOrDefault(ch, 0) + 1);
        }

        // 遍历char2,同事比较元素
        for (char ch2 : chars2) {
            int count = record.getOrDefault(ch2, 0) - 1;
            record.put(ch2, count);
            if (count < 0) {
                return false;
            }
        }
        return true;
    }
}

解法三:使用数组统计字符个数

java 复制代码
public class Test_validAnagram3 {

    public static void main(String[] args) {
        String s = "anagram";
        String t = "nagaram";
        boolean ret = validAnagram(s, t);
        System.out.println(ret);
    }

    public static boolean validAnagram(String s1, String s2) {
        char[] chars1 = s1.toCharArray();
        char[] chars2 = s2.toCharArray();

        // 用 HashMap 来记录字符串 s1 中出现的字符的次数
        int[] record = new int[26];
        for (char ch : chars1) {
            record[ch - 'a']++;
        }

        // 遍历char2,同事比较元素
        for (char ch2 : chars2) {
            record[ch2 - 'a']--;
            if (record[ch2 - 'a'] < 0) {
                return false;
            }
        }
        return true;
    }
}
相关推荐
To_OC2 小时前
LC 131 分割回文串:刚学回溯时,我连怎么切字符串都想不明白
javascript·算法·leetcode
咩咩啃树皮3 小时前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
阳光是sunny3 小时前
LangGraph中的Reducer是什么
前端·人工智能·后端
触底反弹3 小时前
一文搞懂 Tailwind CSS 弹性布局:从原理到实战
前端·css·html
旖-旎3 小时前
LeetCode 518:零钱兑换||(完全背包)—— 题解
c++·算法·leetcode·动态规划·背包问题
阳光是sunny3 小时前
从链到图:LangGraph 入门基础全解析
前端·人工智能·后端
鱟鲥鳚4 小时前
Spring Boot 集成 LangChain4j:从模型调用到 Tool Calling(Demo版)
java·spring boot
To_OC4 小时前
LC 42 接雨水:暴力超时卡半天?前后缀数组一用就通了
javascript·算法·leetcode
小林ixn4 小时前
从 ??= 到 onKeyDown:一个 React 组件的“自我修养”
前端·javascript·react.js
REDcker4 小时前
显示分辨率标准对照详解
前端·网络·分辨率·显示·屏幕