给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1: 输入: s = "anagram", t = "nagaram" 输出: true
示例 2: 输入: s = "rat", t = "car" 输出: false
说明: 你可以假设字符串只包含小写字母。
我的思路:
用一个hash set来存第一个单词的所有字母,然后第二个单词,从第一个字母开始遍历,如果这个字母在hash set里存在,就把它从hash set里删掉,然后继续遍历;如果不存在,那么就返回false,结束。
讲解的思路:
用list来实现hash set。定义一个长度为26的list, 字母a-z对应0-25,对于第一个word,遇到字母就在相应的地方+1;然后对于第二个word,遇到字母就在相应的地方-1.最后看这个list是否都为0.
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
record = [0]*26
for i in s:
record[ord(i)-ord('a')] += 1
for i in t:
record[ord(i)-ord('a')] -= 1
if record == [0]*26:
return True
else:
return False
------------------------
另一个思路:defaultdict
一般来讲,普通字典是dict={}, 添加元素只需要dict[element]=value即可,但是如果element不在字典里,就会报错。
defaultdict类的初始化函数接受一个类型作为参考,当所访问的键不存在的时候,可以实例化一个值作为默认值。
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
from collections import defaultdict
s_dict = defaultdict(int)
t_dict = defaultdict(int)
for i in s:
s_dict[i] += 1
for i in t:
t_dict[i] += 1
if s_dict == t_dict:
return True
else:
return False
最后一步还可以更优化一些:
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
from collections import defaultdict
s_dict = defaultdict(int)
t_dict = defaultdict(int)
for i in s:
s_dict[i] += 1
for i in t:
t_dict[i] += 1
return s_dict == t_dict