声明:
今天是第66道题。给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词。以下所有代码经过楼主验证都能在LeetCode上执行成功,代码也是借鉴别人的,在文末会附上参考的博客链接,如果侵犯了博主的相关权益,请联系我删除
(手动比心ღ( ´・ᴗ・` ))
正文
题目:给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram" 输出: true示例 2:
输入: s = "rat", t = "car" 输出: false
说明:
你可以假设字符串只包含小写字母。
进阶:
如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
解法1。先把字符串强制转换为list,再用内置排序函数sorted对list排序,然后直接比较2个list是否相等,代码如下。
执行用时: 64 ms, 在Valid Anagram的Python提交中击败了54.03% 的用户
class Solution(object):
def isAnagram(self, s, t):
"""
:type s: str
:type t: str
:rtype: bool
"""
s_sorted = sorted(list(s))
t_sorted = sorted(list(t))
return s_sorted == t_sorted
解法2。利用python灵活的语法,set、str、list之间可允许的强制转换
执行用时: 36 ms, 在Valid Anagram的Python提交中击败了86.30% 的用户
class Solution(object):
def isAnagram(self, s, t):
"""
:type s: str
:type t: str
:rtype: bool
"""
return set(s) == set(t) and all(s.count(i)==t.count(i) for i in set(s))
解法2。和上一种解法异曲同工,更好理解一些,就是以t为比较基准,遍历t中的每一个字符出现次数和s中的是否相等
class Solution(object):
def isAnagram(self, s, t):
"""
:type s: str
:type t: str
:rtype: bool
"""
if len(s) != len(t):
return False
t_set = set(t)
for i in t_set:
if s.count(i) != t.count(i):
return False
return True
结尾
解法1&解法2:https://blog.csdn.net/qq_34364995/article/details/80657927
解法3:LeetCode