栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

LeetCode242. 有效的字母异位词,hash

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode242. 有效的字母异位词,hash

1. 题目描述

题目来源:https://leetcode.cn/problems/valid-anagram/

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。

示例1.
输入: s = "anagram", t = "nagaram"
输出: true
示例2. 
输入: s = "rat", t = "car"
输出: false
2. 题解 2.1 解题思路

方法1:使用hash值计算

由于每个字母都有唯一的哈希值,那么一个字符串的哈希值乘积相同,这个字符串包含的元素也一致。算法复杂度为。

代码如下,

class Solution(object):
    def isAnagram(self, s, t):
        """
        :type s: str
        :type t: str
        :rtype: bool
        """
        a = 1
        b = 1
        for i in range(len(s)):
            a *= hash(s[i])
        for i in range(len(t)):
            b *= hash(t[i])
        r = a == b
        return r
if __name__ == '__main__':
    solution = Solution()
    # s = "cat"
    # t = "car"
    s = "anagram"
    t = "nagaram"
    r = solution.isAnagram(s, t)
    print(r)

注意,在Python字母的hash值不同于C++中的ASCII码,连续字母的哈希值不一定是连续的,因此,在Python中,不能通过类似 s[i]-'a' 来得到在有26个字母的列表中 z[i] 的位置索引(C++方法参见https://mp.weixin.qq.com/s/vM6OszkM6L1Mx2Ralm9Dig)。

例如,输出‘a’ ‘b’ ‘c’的hash值如下:

hash('a'): -3155606004080181078
hash('b'): -4333548244287226706
hash('c'): -8353785921970572093

方法2. 字典统计字母出现的次数

Python中的字典:

{key1: val1
 key2: val2
 ...
 keyn: valn}

通过字典统计一个字符串出现的字母以及频数,空间复杂度为,时间复杂度为,代码如下,

class Solution(object):
    def isAnagram(self, s, t):
        """
        :type s: str
        :type t: str
        :rtype: bool
        """
        dict_1 = {}
        dict_2 = {}
        for i in range(len(s)):
            dict_1.setdefault(s[i], 0)
            dict_1[s[i]] += 1
        for i in range(len(t)):
            dict_2.setdefault(t[i], 0)
            dict_2[t[i]] += 1
        # 首先排除s和t包含的字母不一致的情况,返回
        if dict_1.keys() != dict_2.keys():
            return False
        for k,v in dict_1.items():
            if k not in dict_2.keys() or dict_2[k] != v:
                return False
        print(dict_1)
        print(dict_2)
        return True

if __name__ == '__main__':
    solution = Solution()
    # s = "cat"
    # t = "car"
    s = "anagram"
    t = "nagaram"
    r = solution.isAnagram(s, t)
    print(r)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/875116.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号