Leet Code问题438。查找字符串中的所有字谜—需要帮助来了解hash()

问题描述 投票:0回答:1

问题:给定字符串s和非空字符串p,请在s中找到p的字谜的所有起始索引。

解决方案:

class Solution:
    def findAnagrams(self, s: str, p: str) -> List[int]:
        LS, LP, S, P, A = len(s), len(p), 0, 0, []
        if LP > LS:
            return [] # an empty array

        for i in range(LP):
            S, P = S + hash(s[i]), P + hash(p[i])

        if S == P:
            A.append(0)

        for i in range(LP, LS):
            S += hash(s[i]) - hash(s[i - LP]) 
            if S == P:
                A.append(i-LP+1)
        return A

这是我引用@junaidmansuri提交的内容的解决方案。但是,我从未在Python中使用过hash(),并且在理解此函数的功能时遇到了麻烦。

我一直在Jupyter中研究hash(),并注意到hash('abc')生成的整数与hash('bca')不同。出于这个原因,如果字符串中字母的排列影响其哈希值,我将无法理解S == P可能是正确的。

此外,我也看不到S, P = S + hash(s[i]), P + hash(p[i])在呼叫什么。此序列是否将P的值相加十个大整数?真的很困惑。

[非常感谢任何花时间阅读本文档并为我提供帮助的人。

python python-3.x algorithm hash
1个回答
0
投票

尝试一下:

def doit(s):
    return sum([hash(c) for c in s])

doit('abc')
doit('cab')
doit('acb')

您总是得到相同的结果。因此,我在此基础上思考,您将了解该算法的工作原理。

希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.