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 checkInclusion(self, s1: str, s2: str) -> bool:
if len(s2) < len(s1):
return False
v1, v2 = self.hash1(s1), self.hash2(s1)
w1, w2 = self.hash1(s2[:len(s1)]), self.hash2(s2[:len(s1)])
p1, p2 = 1000000009, 1000000007
for i in range(len(s2) - len(s1) + 1):
print(v1, v2, w1, w2)
if v1 == w1 and v2 == w2:
return True
if i < len(s2) - len(s1):
w1 -= pow(5, ord(s2[i])-ord('a'), p1)
w1 += pow(5, ord(s2[i+len(s1)])-ord('a'), p1) + p1
w1 %= p1
w2 -= pow(7, ord(s2[i])-ord('a'), p2)
w2 += pow(7, ord(s2[i+len(s1)])-ord('a'), p2) + p2
w2 %= p2
return False
그냥 슬라이딩 윈도우로 풀까 하다가.....
댓글 영역
획득법
① NFT 발행
작성한 게시물을 NFT로 발행하면 일주일 동안 사용할 수 있습니다. (최초 1회)
② NFT 구매
다른 이용자의 NFT를 구매하면 한 달 동안 사용할 수 있습니다. (구매 시마다 갱신)
사용법
디시콘에서지갑연결시 바로 사용 가능합니다.