[算法][力扣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;
    }
}
相关推荐
10mAh4 分钟前
【Linux】error while loading shared libraries 怎么解决?——ldd、RPATH 与动态链接排错
java·linux·前端
深念Y9 分钟前
stable-diffusion.cpp 的 FLUX.2 Klein 9B 分步
java·前端·数据库
小帅不太帅13 分钟前
1.5M 参数的 OCR 模型,我把它跑进了浏览器
前端·javascript·ai编程
阿pin19 分钟前
Java随笔-红黑树
java·python·算法·红黑树
Hi李耶20 分钟前
【LeetCode】17.电话号码的字母组合
算法·leetcode·职场和发展
风骏时光牛马21 分钟前
AI编程场景下故障根因分析与复盘总结
前端
我命由我1234526 分钟前
Jetpack Compose - @Preview 注解
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
为美好的生活献上中指30 分钟前
Spring AI Advisor 深度实战:构建严谨的 AI Agent 拦截链
java·人工智能·spring·advisor·aiagent
ruofu3334 分钟前
如何让docker使用提前下载好的镜像,而不是在线拉取
java·spring cloud·docker
爱敲键盘的猴子34 分钟前
深入理解 Spring IoC -- 基于 XML 的 Bean 配置详解
xml·java·spring