有效的字母异位符--LeetCode

发布于:2025-05-27 ⋅ 阅读:(17) ⋅ 点赞:(0)

题目

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

示例 1:

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

示例 2:

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

思路一:排序
t 是 s 的异位词等价于「两个字符串排序后相等」。因此我们可以对字符串 s 和 t 分别排序,看排序后的字符串是否相等即可判断。此外,如果 s 和 t 的长度不同,t 必然不是 s 的异位词。

class Solution {
    public boolean isAnagram(String s, String t) {
        //先判断s和t的长度是否相同
        if(s.length() != t.length())return false;
        char[] str1 = s.toCharArray();//将s转变为字符数组
        char[] str2 = t.toCharArray();
        Arrays.sort(str1);//对s进行自动排序
        Arrays.sort(str2);
        return Arrays.equals(str1,str2);//返回str1和str2是否相等
    }
}

思路二:哈希表
从另一个角度考虑,t 是 s 的异位词等价于「两个字符串中字符出现的种类和次数均相等」。由于字符串只包含 26 个小写字母,因此我们可以维护一个长度为 26 的频次数组 table,先遍历记录字符串 s 中字符出现的频次,然后遍历字符串 t,减去 table 中对应的频次,如果出现 table[i]<0,则说明 t 包含一个不在 s 中的额外字符,返回 false 即可。

class Solution {
    public boolean isAnagram(String s, String t) {
        //先判断s和t的长度是否相等
        if(s.length() != t.length())return false;
        //创建哈希表共26个字母
        int[] table = new int[26];
        //依次将s中的字符存入哈希表中
        for(int i = 0;i < s.length();i++){
            table[s.charAt(i) - 'a']++;
        }
        //将t中的对应字符移除
        for(int i = 0;i < t.length();i++){
            table[t.charAt(i) - 'a']--;
            //若哈希表中有负数,则说明不相等
            if(table[t.charAt(i) - 'a'] < 0)return false;
        }
        //否则,相等
        return true;
    }
    
}


网站公告

今日签到

点亮在社区的每一天
去签到