来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-anagram
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
给定两个字符串 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 * 104
s 和 t 仅包含小写字母
1. 神解
return sorted(s)==sorted(t) # sorted() 函数对所有可迭代的对象进行排序操作。
2. 另一神解
from collections import Counter
return Counter(s)==Counter(t) # Counter函数对迭代对象进行计数
3. list解法
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
# 判断字符串是否等长
if(len(s)!=len(t)):return False
# 判断字符串是否相等
if(s==t):return True
# 建立长度26的列表,用于对字符计数
ll = [0]*26
# 字符串s中字符对应的索引位置值加1
for i in s:
ll[ord(i)-ord('a')] += 1
# 字符串t中字符对应的索引位置值减1
for i in t:
ll[ord(i)-ord('a')] -= 1
# 如果列表中存在不为0的索引位置,说明s和t不是异位词
for i in range(26):
if ll[i]!=0:
return False
return True
4. dict解法
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
# 判断字符串是否等长
if(len(s)!=len(t)):return False
# 判断字符串是否相等
if(s==t):return True
# 使用长度26的字典保存字符数
dd = dict()
for i in range(26):
dd[chr(97+i)] = 0 # chr()获得整数对应的ASCII码, ord()获得ASCII码对应的整数值
# 与3的解法一致,通过实际运行效果相比,认为使用dict比list在内存和时间上都好一些
for i in s:
dd[i] += 1
for i in t:
dd[i] -= 1
for v in dd.values():
if v!=0:
return False
return True