class Solution:
def hash1(self, s):
p = 1000000009
ans = 0
for ss in s:
ans = (ans + pow(5, ord(ss) - ord('a'), p)) % p
return ans
def hash2(self, s):
p = 1000000007
ans = 0
for ss in s:
ans = (ans + pow(7, ord(ss) - ord('a'), p)) % p
return ans
def findAnagrams(self, s: str, p: str) -> List[int]:
ans = []
if len(s) < len(p):
return ans
v1, v2 = self.hash1(p), self.hash2(p)
w1, w2 = self.hash1(s[:len(p)]), self.hash2(s[:len(p)])
p1, p2 = 1000000009, 1000000007
for i in range(len(s) - len(p) + 1):
print(v1, v2, w1, w2)
if v1 == w1 and v2 == w2:
ans.append(i)
if i < len(s) - len(p):
w1 -= pow(5, ord(s[i])-ord('a'), p1)
w1 += pow(5, ord(s[i+len(p)])-ord('a'), p1) + p1
w1 %= p1
w2 -= pow(7, ord(s[i])-ord('a'), p2)
w2 += pow(7, ord(s[i+len(p)])-ord('a'), p2) + p2
w2 %= p2
return ans
댓글 영역
획득법
① NFT 발행
작성한 게시물을 NFT로 발행하면 일주일 동안 사용할 수 있습니다. (최초 1회)
② NFT 구매
다른 이용자의 NFT를 구매하면 한 달 동안 사용할 수 있습니다. (구매 시마다 갱신)
사용법
디시콘에서지갑연결시 바로 사용 가능합니다.