leetcode242,383

文章目录

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

通过截图

leetcode242,383

代码(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

通过截图

leetcode242,383

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

通过截图

leetcode242,383

代码(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,383
如有错误,敬请指正,欢迎交流,谢谢♪(・ω・)ノ

上一篇:Python破解pdf打开密码


下一篇:Mapper动态代理方式