ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

leetcode242,383

2022-01-19 11:58:43  阅读:154  来源: 互联网

标签:leetcode242 ransomNote hash Counter magazine 383 str defaultdict


文章目录

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 * 104
s 和 t 仅包含小写字母
 

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

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

分析

  • 1.defultdict构建默认字典,通过遍历构建出s,t的哈希表,通过比较即可知道两者是否相等
  • 2.也可以直接使用Counter计数器,这样就不用遍历s,t,代码更加简洁

代码(defaultdict)

from collections import defaultdict
class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        hash_s,hash_t= defaultdict(int),defaultdict(int)
        for i in s:
            hash_s[i]+=1
        for i in t:
            hash_t[i]+=1
        return hash_s == hash_t

通过截图

在这里插入图片描述

代码(Counter)

from collections import Counter
class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        hash_s,hash_t= Counter(s),Counter(t)
        return hash_s == hash_t

通过截图

在这里插入图片描述

383. 赎金信

给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。

如果可以,返回 true ;否则返回 false 。

magazine 中的每个字符只能在 ransomNote 中使用一次。

 

示例 1:

输入:ransomNote = "a", magazine = "b"
输出:false
示例 2:

输入:ransomNote = "aa", magazine = "ab"
输出:false
示例 3:

输入:ransomNote = "aa", magazine = "aab"
输出:true
 

提示:

1 <= ransomNote.length, magazine.length <= 105
ransomNote 和 magazine 由小写英文字母组成

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

分析

1.使用默认字典dict,最后遍历字符串,如果ransomNote每个位置的哈希值小于等于magazine的哈希值,则ransomNote必然是magazine的子集(其实使用set也可以判断ransomNote元素是否是magazine的子集,但是判断不了元素数量得额外处理 )
2.使用Count计数器:核心还是1的方法,区别是不用遍历字符串了

代码( defalutdict)

from collections import defaultdict
class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        hash_s,hash_t= defaultdict(int),defaultdict(int)
        for i in s:
            hash_s[i]+=1
        for i in t:
            hash_t[i]+=1
        return hash_s == hash_t

通过截图

在这里插入图片描述

代码(Counter)

from collections import Counter
class Solution:
    def canConstruct(self, ransomNote: str, magazine: str) -> bool:
        
        hash_r,hash_m= Counter(ransomNote),Counter(magazine)
        for i in ransomNote:
            if hash_r[i] > hash_m[i]:
                return False
        return True

通过截图

在这里插入图片描述
如有错误,敬请指正,欢迎交流,谢谢♪(・ω・)ノ

标签:leetcode242,ransomNote,hash,Counter,magazine,383,str,defaultdict
来源: https://blog.csdn.net/m0_51302822/article/details/122576093

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有