问题:给定字符串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
的值相加十个大整数?真的很困惑。
[非常感谢任何花时间阅读本文档并为我提供帮助的人。
尝试一下:
def doit(s):
return sum([hash(c) for c in s])
doit('abc')
doit('cab')
doit('acb')
您总是得到相同的结果。因此,我在此基础上思考,您将了解该算法的工作原理。
希望这会有所帮助。