TGViewer
Алгоритмы - Собеседования, Олимпиады, ШАД Алгоритмы - Собеседования, Олимпиады, ШАД @algoses · 12.1K subscribers
Post #592 2.67K
Задача с собеседования в OpenText

Дана строка num, представляющая собой большое целое число. Число считается "хорошим", если оно удовлетворяет следующим условиям:
- оно является подстрокой длиной 3 в строке num
- все три цифры в числе одинаковы
Верните максимальное "хорошее" число в виде строки или пустую строку "", если такого числа не существует.
Обратите внимание, что строка num или "хорошее" число могут содержать ведущие нули.

Пример 1:
Input: num = "6777133339"
Output: "777"
Explanation: в строке содержатся два "хороших" числа: "777" и "333".
"777" больше, возвращаем "777".

Пример 2:
Input: num = "2300019"
Output: "000"
Explanation: "000"- единственное "хорошее" число.

Пример 3:
Input: num = "42352338"
Output: ""
Explanation: строка не содержит подстроку из трёх одинаковых цифр. Следовательно, "хорошего" числа не существует.

Ограничения:
3 <= num.length <= 1000
Строка num состоит только из цифр.

НАШ ЧАТ АЛГОРИТМИСТОВ

Решение
Проходим по строке окном фиксированного размера 3, проверяя на каждой позиции, состоит ли окно из трёх одинаковых символов. Выбираем максимальное из валидных окон путём лексикографического сравнения.

Инициализируем переменную res, в которой будем хранить максимальную найденную подстроку, как пустую строку (первая же "хорошая" подстрока обновит res).
Проходим по строке num до len(num) - 2, проверяя все возможные начальные позиции трёхсимвольной подстроки (последняя валидная позиция, с которой может начаться подстрока - len(num) - 3):
Если текущий эл-т идентичен двум последующим:
- обновляем res, если найденная подстрока из трёх символов (берём срез строки с индексами i, i+1 и i+2) больше текущего значения res.
Возвращаем значение res.


Сложность
O(n) - по времени (проходим n-2 итераций, где n = len(num))
O(1) - по памяти (храним только одну переменную res)


Код
class Solution:
def largestGoodInteger(self, num: str) -> str:
res = ""
for i in range(len(num) - 2):
if num[i] == num[i+1] == num[i+2]:
res = max(res, num[i:i+3])

return res


@algoses
  • ❤ 4
More from @algoses
  1. Sep 23, 2026Задача с собеседования в Zoho Даны две строки s и t. Определите, являются ли они изоморфны…
  2. Sep 19, 2026Полный цикл отбора в Spectral на SWE (HFT) Недавно рассказывали про отбор в Fast Forward н…
  3. Sep 18, 2026❗️ Яндекс открыл Intern Week Offer на стажировку, где всего за неделю ты можешь получить о…
  4. Sep 18, 2026Задача с собеседования в Zeta Зима близко! Во время соревнования ваша первая задача - спро…
  5. Sep 17, 2026Как стать квантом Сегодня многие талантливые амбициозные ребята хотят попасть в хфт и стат…
  6. Sep 13, 2026Как и зачем тащить ICPC ICPC в большинстве регионов проходит в 4 этапа. Даты зависят от ре…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →