leetcode 242 有效字母异位词(anagram)
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例:
输入: s = “anagram”, t = “nagaram”
输出: true
输入: s = “rat”, t = “car”
输出: false
解题思路:
- 解法一:排序法
对单词排序,再进行比较. O(nlogn) , 空间为O(1) - 解法二:Map计数
{letter : count},O(N),循环一遍单词
代码思路:
分别创建哈希表,然后给对应位置的字母计数,get函数中的0是默认值,当元素不存在时,初始化为0
第二个做法是自己创建了一个26位的数组,ord函数是获取字母的ASCII码,减去a就是对应【0-25】个数字,然后在之前创建的26位数组中进行计数
代码:
#使用内置dict来做哈希表
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
s_dict = {}
t_dict = {}
for i in s:
s_dict[i] = s_dict.get(i,0) +1
for i in t:
t_dict[i] = t_dict.get(i,0) +1
return s_dict == t_dict
# 自己创建了hash table
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
s_dict = [0]*26
t_dict = [0]*26
for i in s:
s_dict[ord(i)-ord('a')] +=1
for i in t:
t_dict[ord(i)-ord('a')] +=1
return s_dict == t_dict
复 杂 度 分 析 : \color{red}{复杂度分析:} 复杂度分析:
时间复杂度:O(n)
空间复杂度:O(1)