[算法][力扣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;
    }
}
相关推荐
折哥的程序人生 · 物流技术专研3 分钟前
《Java 100 天进阶之路》第23篇:缓冲区数据结构 ByteBuffer
java·开发语言·数据结构·后端·面试·求职招聘
REDcker9 分钟前
C++循环与编译器优化详解 别名不变量向量化与GCC Clang验证及perf实践
java·jvm·c++·c·clang·gcc
高斯林.神犇22 分钟前
Idea中使用Git
java·ide·intellij-idea
LCG元25 分钟前
STM32实战:基于STM32F103的智慧教室环境监控系统(CO₂+光照+人数统计)
前端·stm32·嵌入式硬件
yqcoder37 分钟前
Vue 的心脏:深度解析 Vue 2 vs Vue 3 响应式机制
前端·javascript·vue.js
超梦dasgg39 分钟前
Spring Security 原理 + 生产环境认证授权实战
java·后端·spring
YL2004042642 分钟前
046二叉树展开为链表
数据结构·leetcode·链表
wand codemonkey44 分钟前
【第五步+前后分离调】最后的联动调试--java+Vue3项目
java·开发语言·vue.js
东方小月1 小时前
Claude Code Skill 完全指南:一个 markdown 文件,就是一个专家分身
前端·后端
JunLa1 小时前
L angGraph vs 链式调用
java·网络·数据库