给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
- 示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
- 示例 2:
输入: s = "rat", t = "car"
输出: false
说明:
你可以假设字符串只包含小写字母。进阶:
如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
解析
- 将字符串作为字符数组排序,然后比较即可,最后运行速度依赖于排序的实现方式
- 手动建立hash,用26长度的数组即可,因为题目说明只包含英语字母
实现
java实现,用时3ms,执行速度超越94.5%, 内存超越95.6%
public static boolean isAnagram(String s, String t) {
int sl = s.length(), tl = t.length(), i;
if (sl != tl) return false;
int[] hashTable = new int[26];
for (i = 0; i < sl; hashTable[s.charAt(i++) - 97]++) { }
for (i--; i >= 0; ) {
if (--hashTable[t.charAt(i--) - 97] < 0) {
return false;
}
}
for (i = 0; i < 26; i++) {
if (hashTable[i] != 0) {
return false;
}
}
return true;
}
题目来源:力扣(LeetCode)