Python leetcode题解

Python:每天一道leetcode之242题

题目

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

示例 1:

输入: s = "anagram", t = "nagaram"
输出: true
示例 2:

输入: s = "rat", t = "car"
输出: false
说明:
你可以假设字符串只包含小写字母。

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-anagram
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

字母异位词的本质就是,词中的字母均为相同数量。那么首先,字符串长度不一样的应该直接判断为false,其次用集合的去重性判断字符串中含有的字母类别是否相同。剩下才判断各类字母数量是否相等。

解法

第一步

首先将一定不符合条件的直接判错

if len(set(s+t)) != len(set(s)) or len(s) != len(t):
    return False

这里用len函数去判断了s、t字符串的长度是否相等

用set的去重特性直接判断出s字符串中有几个不同字母,并且同样的利用set的去重判断t字符串中 的字母是否和s字符串中的相同。

第二步

接下来就是判断s、t字符串中的各类字母个数是否相等。由于最多26个字母,我这里采用了推导式的方式生成一个字典并将各个字母的初始值计为0。

alphabet = {k:0 for k in set(s)}

最后就是遍历s字符串中出现的字母,每出现一次,字母键对应的值加1。

遍历t中的字母,出现一次减1。判断alphabet字典中的值是否全为0就可以了。

          for i in s:
              alphabet[i] += 1
          for j in t:
              alphabet[j] -= 1
          for l in alphabet.values():
              if l != 0:
                  return False
          return True

执行反馈截图

image.png

复杂度

第一步为常量时间、第二步的第一个小步骤也是常量时间(最大不过26),第二步的第二个步骤时间为O(n)+O(n),即复杂度为O(n)

联系方式

如果您对本文章有任何意见或者建议,欢迎您联系我批评指正🙏

邮箱:Wency03lk@outlook.com

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 9,955评论 0 5
  • 数据结构是算法的基石,如果没有扎实的数据结构基础,想要把算法学好甚至融会贯通是非常困难的,而优秀的算法又往往取决于...
    layjoy阅读 4,110评论 0 1
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 8,812评论 0 2
  • LeetCode 查找表专题 3:set 和 map 不同底层实现的区别 set 和 map 不同的底层实现,影响...
    李威威阅读 3,395评论 0 0
  • 周日一大早,就分别接到姐姐和朋友的电话,都是要给我送粽子,我以要减肥为借口拒绝了。 走在市场里,看着一个又一个摊位...
    野百合的春天阅读 3,385评论 3 4