自学内容网 自学内容网

Leetcode 242. 有效的字母异位词

242. 有效的字母异位词

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)!