力扣[242]有效的字母异位体
题目
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词(构成字符串的字母种类和个数均相同,只不过顺序不同)。
题解1:暴力
可以将两个字符串都转化为数组,然后对两个数组先进行排序,如果排序后的数组内容相同,则两个字符串时字母异位体:
public boolean isAnagram(String s, String t) {
char[] schar = s.toCharArray();
char[] tchar = t.toCharArray();
Arrays.sort(schar);
Arrays.sort(tchar);
return Arrays.equals(schar, tchar);
}
这个解法用来系统内置排序,所以时间复杂度应为O(NlogN),N为s、t中较长字符串的长度。
题解2:哈希表
利用哈希表来统计每个字符出现的频次,如果每个字符出现的频次是一样的,那么这两个字符串也是字母异位体,为了检查 t 是否是 s 的重新排列,我们可以计算两个字符串中每个字母的出现次数并进行比较。因为 s 和 t 都只包含 A-Z 的字母,所以一个简单的 26 位计数器表就足够了。
我们需要两个计数器数表进行比较吗?实际上不是,因为我们可以用一个计数器表计算 s 字母的频率,用 t 减少计数器表中的每个字母的计数器,然后检查计数器是否回到零。
public boolean isAnagram(String s, String t) {
int[] counts = new int[</