题目描述:
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例1:
输入: s = “anagram”, t = “nagaram”
输出: true
示例 2:
输入: s = “rat”, t = “car”
输出: false
说明:
你可以假设字符串只包含小写字母。
如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
知识点:
- 排序
- 哈希
思路和代码:
- 为了检查t是否是s的重新排列,我们可以计算两个字符串中每个字母的出现次数并进行比较。因为S和T都只包含A-Z的字母,所以一个简单的26位计数器表就足够了。
- 我们需要两个计数器数表进行比较吗?实际上不是,因为我们可以用一个计数器表计算s字母的频率,用t减少计数器表中的每个字母的计数器,然后检查计数器是否回到零。
- 使用哈希表而不是固定大小的计数器。想象一下,分配一个大的数组来适应整个 Unicode 字符范围,这个范围可能超过 100万。哈希表是一种更通用的解决方案,可以适应任何字符范围。
def isAnagram(s,t):
if len(s)!=len(t):
return False
hash_s = dict()
for c in s: # 把s放入哈希表中,并记录每个字符出现的次数
if c in hash_s:
hash_s[c]+=1
else:
hash_s[c]=1
for c in t: # 从哈希表中一次扣除出现的字符
if c in hash_s:
if hash_s[c]>1:
hash_s[c]-=1
else:
hash_s.pop(c)
if hash_s: # 若执行完后哈希表不为空则返回False
return False
else:
return True