给定两个字符串
s
和t
,编写一个函数来判断t
是否是s
的字母异位词。注意:若
s
和t
中每个字符出现的次数都相同,则称s
和t
互为字母异位词。示例 1:
输入: s = "anagram", t = "nagaram" 输出: true示例 2:
输入: s = "rat", t = "car" 输出: false 1 <= s.length, t.length <= 5 * 104 s 和 t 仅包含小写字母
思路分析:
方法一:排序
分析题目可知,s 和 t 互为字母异位词,也就是两个字符串排序后相等。
方法二:哈希表
由于 s 和 t 只包含小写字母,我们可以维护一个长度为 26 的频次数组,s 在对应位置增加,t 在对应位置减少。
如果哈希表的值都为 0,那么 s 和 t 互为字母异位词成立。
代码实现:
排序
class Solution {
public boolean isAnagram(String s, String t) {
if (s.length() != t.length())return false;
char [] s1 = s.toCharArray();
char [] s2 = t.toCharArray();
Arrays.sort(s1);
Arrays.sort(s2);
return Arrays.equals(s1,s2);
}
}
哈希表
class Solution {
public boolean isAnagram(String s, String t) {
if (s.length() != t.length())return false;
int [] a = new int [26];
for (int i = 0; i < s.length(); i++){
a[s.charAt(i) - 'a']++;
a[t.charAt(i) - 'a']--;
}
for (int i = 0; i < 26; i++){
if (a[i] != 0)return false;
}
return true;
}
}
提交结果:
排序比较
37 / 37 个通过测试用例
状态:通过
执行用时: 2 ms
内存消耗: 42.1 MB
提交时间:19 分钟前
哈希表
37 / 37 个通过测试用例
状态:通过
执行用时: 4 ms
内存消耗: 41.5 MB
提交时间:16 分钟前