题目简介
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。注意: 若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
题目解法
题目就是要判断s和t两个字符串的出现频率是否相同,相同则返回true,不相同则返回false。也就是我们需要记录出现频率然后进行对比即可。也就是需要存储字符出现次数后,然后进行比对。有两种解决办法,第一种是哈希表,第二种是使用数组。两种方法相差不大,这里使用数组的方法进行统计。
代码实现
public boolean isAnagram(String s, String t) {
//判断字符串是否相同
if (s.equals(t))return true;
//创建存储频率数组
int[] ints = new int[26];
for (int i = 0; i < s.length(); i++) {
ints[s.charAt(i)-97]++;
}
for (int i = 0; i < t.length(); i++) {
ints[t.charAt(i)-97]--;
}
for (int i = 0; i < ints.length; i++) {
if (ints[i] != 0)return false;
}
return true;
}
时间复杂度 O(n)取决于字符串的数量,空间复杂度O(1)和存储频率数组有关。