*(А. Богданов) Текстовый файл состоит не более чем из \(10^6\) символов и содержит только десятичные цифры и заглавные буквы латинского алфавита. Найдите минимальную длину подстроки, содержащей все шестнадцатеричные цифры. Строка может включать повторяющиеся цифры и другие символы. В ответе укажите найденную длину.
Решение:
Python. Медленный (грубый перебор) алгоритм
s = open('6099.txt').readline().strip()
ml = float('inf')
ls = len(s)
for i in range(ls - 15):
nums = set('0123456789ABCDEF')
t = 0
if s[i] in nums:
t = 1
nums.remove(s[i])
p = i + 1
while p < ls and nums:
if s[p] in nums:
nums.remove(s[p])
p += 1
if not nums:
ml = min(ml, p - i)
print(ml)
Python. Эффективный алгоритм
s = open('6099.txt').readline().strip()
alph = '0123456789ABCDEF'
pd = {c: [] for c in alph}
for i in range(len(s)):
if s[i] in alph:
pd[s[i]].append(i)
pcurr = sorted([pd[c].pop(0) for c in alph])
ml = pcurr[-1] - pcurr[0] + 1
ch = s[pcurr.pop(0)]
while pd[ch]:
pcurr.append(pd[ch].pop(0))
pcurr.sort()
ml = min(ml, pcurr[-1] - pcurr[0] + 1)
ch = s[pcurr.pop(0)]
print(ml)
Ответ: \(42\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене