Leetcode 242. 有效的字母异位词
一、题目描述
给定两个字符串 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 * 10^4
- s 和 t 仅包含小写字母
二、我的想法
1.最开始的想法是先求出 s 和 t 的长度,如果不相等就直接返回 False。将 t 转换成 list ,循环遍历 s ,当循环到的字符在 list 中时,将该字符从 list 中删掉;如果不在 list 中,就返回 False。如果直到最后循环完 s 了还没返回,就返回 True。这个想法能通过,就是有点慢。
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
sLen = len(s)
tlen = len(t)
if sLen != tlen:
return False
tlist = list(t)
for c in s:
if c in tlist:
tlist.remove(c)
else:
return False
return True
2.后来想到的使用 defaultdict 。将 s 对应的字符和次数存储在 dict 中。循环遍历 t,如果对应的字符在 dict 中,且次数大于 0 ,就将次数减 1;如果字符在 dict 中但是次数小于等于 0 ,就返回 False ;如果字符不在 dict 中,返回 False。如果直到最后循环完 t 了还没返回,就返回 True。
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
sLen = len(s)
tLen = len(t)
if sLen != tLen:
return False
sDict = defaultdict(int)
for c in s:
sDict[c] += 1
for q in t:
if q in sDict:
if sDict[q] <= 0:
return False
else:
sDict[q] -= 1
else:
return False
return True
三、其他人的题解
Krahets 的题解 242. 有效的字母异位词(哈希表,清晰图解) 感觉跟我第二个想法差不多,但是他的更简洁。
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
if len(s) != len(t):
return False
dic = defaultdict(int)
for c in s:
dic[c] += 1
for c in t:
dic[c] -= 1
for val in dic.values():
if val != 0:
return False
return True
原文地址:https://blog.csdn.net/li_yizhixiaowukong/article/details/140550175
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!