赎金信python(leetcode383)

#383. 赎金信

242. 有效的字母异位词 题目类似

给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。如果可以,返回 true ;否则返回 false 。

其他条件:

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

ransomNote 和 magazine 由小写英文字母组成

解题:

全是小写,可以由数组存储magazine各字符出现的次数,再判断ransomNote中各字符出现的次数 

magazine各字符出现的次数必须大于等于ransomNote各字符出现的次数

class Solution(object):
    def isAnagram(self, s, t):
        """
        :type s: str
        :type t: str
        :rtype: bool
        """
        # 数组即是一个简单的哈希表,题目中只有小写字母,可以定义数组record记录字母出现的次数
        # 哈希表的大小为26,因为字符a到字符z的ASCII也是26个连续的数值
        # 检测方式:
        # 对于字符串s,对应字母出现 +1,对于t,对应字母出现 -1;最终数组record所有元素为0则返回true

        record = [0] * 26
        for i in range(len(s)):
            #并不需要记住字符a的ASCII,只要求出一个相对数值就可以了,ord返回对应的 ASCII 数值,或者 Unicode 数值
            record[ord(s[i]) - ord('a')] += 1
        
        for i in range(len(t)):
            record[ord(t[i]) - ord('a')] -= 1

        for i in range(len(record)): # 虽然也存在遍历,但是record的长度是26,而不是n
            if record[i] != 0:
                return False
        return True

上一篇:Go面试题(五):图解 Golang Channel 的底层原理


下一篇:2021年G2电站锅炉司炉试题及解析及G2电站锅炉司炉实操考试视频