LeetCode - 有效的字母异位词

260 阅读1分钟
题目链接

leetcode.cn/problems/va…

题目描述

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

注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。

示例 1:

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

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

解决方案

考虑到两个字符串只有小写字母,所以先遍历s字符串,用长度26的int数组统计a-z个字母出现的次数,然后遍历t字符串,有相应字母则减1,发现对应字母个数不为0,则证明s、t中每个字符出现的次数不相等;

public boolean isAnagram(String s, String t) {
    if (s == null || t == null) return false;
    if ("".equals(s) && "".equals(t)) return true;
    if (s.length() != t.length()) return false;

    int[] nums = new int[26];//用于记录26个字母出现的次数,默认为0
    char[] sChars = s.toCharArray();//转换成字符数组
    char[] tChars = t.toCharArray();//转换成字符数组
    for (char sChar : sChars) {
        int num = nums[sChar - 'a'];//sChar - 'a'为计算数组下表,sChar为'a',那么数组下标则为0
        num++;//字母个数+1
        nums[sChar - 'a'] = num;//重新赋值
    }

    for (char tChar : tChars) {
        int num = nums[tChar - 'a'];
        num--;
        if (num < 0) {//同样字母出现的次数,不相等
            return false;
        }
        nums[tChar - 'a'] = num;//重新赋值
    }

    return true;
}