【求知=>算法】有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s的字母异位词。
注意:若 s 和 t中每个字符出现的次数都相同,则称 s 和 t互为字母异位词。
示例 1:
输入: s = “anagram”, t = “nagaram”
输出: true
示例 2:
输入: s = “rat”, t = “car”
输出: false
提示:
1 <= s.length, t.length <= 5 * 104s和t仅包含小写字母
进阶:如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
解题思路
- 通过counter函数统计字符串出现的次数进行对比
- 定义s和t,赋值为
s = “anagram”和t = “nagaram”; - 判断两个字符串长度是否一致,如果不一致返回
true; - 定义s_temp和t_temp并统计s和t的字符串出现的次数;
- 循环s_temp,判断s_temp和t_temp是否一致,如果不一致返回
false,否则返回true
# Counter函数
# 直接生成每个字母出现次数的情况的字典
# 然后再遍历比较
# 应该会出现一个字母被判断多次
s = "anagram"
t = "nagaram"
# s = "rat"
# t = "car"
if len(s) !=len(t):
return False
s_temp = collections.Counter(s)
t_temp = collections.Counter(t)
for i in range(len(s_temp)):
if s_temp[s[i]] != t_temp[s[i]]:
return False
return True
- 通过sorted函数排序对比
- 定义s和t,赋值为
s = “anagram”和t = “nagaram”; - 将s和t进行排序,然后对比是否相等,如果相等就是有效的字母异位词,不想等就不是有效的字母异位词;
s = "anagram"
t = "nagaram"
# s = "rat"
# t = "car"
return sorted(s) == sorted(t)
- 通过字典的方式
- 定义s和t,赋值为
s = “anagram”和t = “nagaram”; - 定义dict_s和dict_t为空字典;
- 以键值对遍历数据,如果当前循环的数据在dict_s就将key的数字加一,否则dict_s的数字赋值为一;
- 以键值对遍历数据,如果当前循环的数据在dict_t就将key的数字加一,否则dict_t的数字赋值为一;
- 对比dict_s和dict_t是否相等,如果相等就是有效的字母异位词,不想等就不是有效的字母异位词;
# s = "anagram"
# t = "nagaram"
s = "rat"
t = "car"
dict_s = {}
dict_t = {}
for i,n in enumerate(s):
if n in dict_s:
dict_s[n]+=1
else:
dict_s[n]=1
for j,item in enumerate(t):
if item in dict_t:
dict_t[item]+=1
else:
dict_t[item]=1
return dict_s == dict_t
- 通过字典和count方式
- 定义s和t,赋值为
s = “anagram”和t = “nagaram”; - 定义dict_s和dict_t为空字典;
- 遍历数据、如果当前循环的数据不在dict_s中、就在当前的基础上统计改字符串的次数;
- 遍历数据、如果当前循环的数据不在dict_t中、就在当前的基础上统计改字符串的次数;
- 对比dict_s和dict_t是否相等,如果相等就是有效的字母异位词,不想等就不是有效的字母异位词;
s = "anagram"
t = "nagaram"
# s = "rat"
# t = "car"
dict_s = {}
dict_t = {}
for i in s:
if i not in dict_s:
dict_s.update({i: s.count(i)})
for j in t:
if j not in dict_t:
dict_t.update({j:t.count(j)})
return dict_s == dict_t