题目链接
题目描述
给定两个字符串 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;
}