力扣-242-两个字符串包含的字符是否完全相同

题目:
242. Valid Anagram(easy)


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

1
2
3
4
5
6
7
8
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
示例 2:
输入: s = "rat", t = "car"
输出: false
说明:
你可以假设字符串只包含小写字母。

进阶:
如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?


解题思路:
本题所求的“字母异位词”就是判断两个字符串中的所有小写字母是否都相同,所以第一想法就是可以用HashMap存储第一个字符串的字符,再去判断第二个字符串是否都满足。
但是本题比较简单,只包含26个小写字符,因此可以简化用长度为26的整型数组对字符串出现的字符进行统计,不再使用HashMap.
其中,判断两个字符串字符是否都相同的代码更为巧妙,需要理解学会。


代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Java:
public boolean isAnagram(String s,String t){
int[] cnts = new int[26];
for(char ch : s.toCharArray()){
cnts[ch - 'a'] ++;
}
for(char ch : t.toCharArray()){
cnts[ch - 'a'] --;
}
for(int cnt : cnts){
if(cnt != 0) return false;
}
return true;
}