【求知=>算法】有效的字母异位词

1,010 阅读3分钟

【求知=>算法】有效的字母异位词

给定两个字符串 st ,编写一个函数来判断 t 是否是 s的字母异位词。

注意:若 st中每个字符出现的次数都相同,则称 st互为字母异位词。

示例 1:

输入: s = “anagram”, t = “nagaram”

输出: true

示例 2:

输入: s = “rat”, t = “car”

输出: false

提示:

  • 1 <= s.length, t.length <= 5 * 104
  • st 仅包含小写字母

进阶:如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?

解题思路


  1. 通过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

  1. 通过sorted函数排序对比
  • 定义s和t,赋值为s = “anagram”t = “nagaram”;
  • 将s和t进行排序,然后对比是否相等,如果相等就是有效的字母异位词,不想等就不是有效的字母异位词;
s = "anagram"
t = "nagaram"

# s = "rat"
# t = "car"

return sorted(s) == sorted(t)
  1. 通过字典的方式
  • 定义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
  1. 通过字典和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

知识扩展


Counter类(计数器)的应用

count()方法的使用

sorted() 函数的应用

python的append insert extend pop del remove使用

enumerate() 函数的应用