Я работаю над следующей проблемой:
Меня вдохновил первый ответ на этот вопрос в будущем решение, использующее некоторые свойства XOR (Identity, Commulative и Self-Inverse) для работы в O (n) времени и O (1) пространстве.
def checkInclusion(s1: str, s2: str) -> bool:
# Checks for permutation of s1 inside of s2.
# Xor's all of the characters in a s1-length window of s2
# If xor_product = 0 --> permutation identified
# Relies on properties of xor to find answer: identity, communtative, and self-inverse
xor_product = 0
for i in range(0, len(s2) - len(s1) + 1):
s1_index = 0
for j in range(i, i + len(s1)):
xor_product = xor_product ^ ord(s1[s1_index]) ^ ord(s2[j])
s1_index += 1
if xor_product == 0: return True
xor_product = 0
return False
Это решение работает для большинство входов, но не работает, когда s1 = "kitten"
и s2 = "sitting"
. Концептуально ли это решение ошибочно? Если так, то как? Если нет, то в чем ошибка? По общему признанию, я новичок в кодировании вопросов стиля интервью. Вся помощь оценена.