题目
示例 1:
输入: s = "anagram", t = "nagaram" 输出: true
示例 2:
输入: s = "rat", t = "car" 输出: false
提示:
1 <= s.length, t.length <= 5 * 104
s
和t
仅包含小写字母
思路
python中自带字典数据结构,直接使用字典对字符串中出现的字母进行统计,若是两个字典相等,即满足字母异位词条件,返回True,若不相等,返回False
代码
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
s_dict = self.get_dict(s)
t_dict = self.get_dict(t)
if s_dict == t_dict:
return True
else:
return False
def get_dict(self,s):
s_dict = {}
for i in s:
if i in s_dict:
s_dict[i]+=1
else:
s_dict[i] = 1
return s_dict
思路2
可以设置个一个数组,a-z一共26个字母,题目中强调了只有小写字母,所以26个够用
因为字符a到字符z的ASCII也是26个连续的数值。
因为字符a到字符z的ASCII是26个连续的数值,所以字符a映射为下标0,相应的字符z映射为下标25。
再遍历 字符串s的时候,只需要将 s[i] - ‘a’ 所在的元素做+1 操作即可,并不需要记住字符a的ASCII,只要求出一个相对数值就可以了。 这样就将字符串s中字符出现的次数,统计出来了。
代码2
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
result = [0]*26
for i in s:
result[ord(i) - ord("a")] +=1
for j in t:
result[ord(j) - ord("a")] -=1
for n in result:
if n != 0:
return False
return True