Задача. Дана строка символов. Найти подстроку максимальной длины, содержащую не более двух цифр 0. Вывести найденную подстроку и ее дину (если таких подстрок несколько, вывести любую из них).
Воспользуемся алгоритмом выделения всех возможных подстрок некоторой заданной строки, рассмотренным ранее в этом блоге.
for k in range(len(s)):
for j in range(k,len(s)):
print(s[k:j+1])
Как будем решать задачу
- Запустим внешний цикл по счетчику k по длине строки.
- Обнулим счетчик p символов-цифр 0.
- Запустим внутренний цикл по счетчику j в диапазоне от значения внешнего счетчика цикла до конца строки.
- Если символ строки это цифра 0, то увеличим счетчик цифр 0.
- Если счетчик цифр 0 более 2, то прекратим обработку текущей подстроки командой break, в противном случае найдем максимум длины текущей подстроки.
Программа решения задачи на языке Python
s = "0a0bc00d04efgrt0habc0"
m = 0
for k in range(len(s)):
p = 0
for j in range(k,len(s)):
if s[j]=='0':
p+=1
if p>2:
break
else:
if len(s[k:j+1])>=m: #найдем последнюю такую подстроку
m = len(s[k:j+1])
x = s[k:j+1]
print(x, len(x))
Результат запуска программы
Проведем эксперимент с нейросетью. Сможет ли нейросеть написать код, решающий данную задачу?
Будем использовать нейросеть chatinfo.ru
Запрос. Дана строка символов. Найти подстроку максимальной длины, содержащую не более двух цифр 0. Вывести найденную подстроку и ее дину (если таких подстрок несколько, вывести последнюю из них).
Код от нейросети chatinfo.ru
def find_max_substring(string):
max_length = 0 # Переменная для хранения длины максимальной подстроки
max_substring = "" # Переменная для хранения максимальной подстроки
current_length = 0 # Переменная для хранения длины текущей подстроки
current_substring = "" # Переменная для хранения текущей подстроки
zero_count = 0 # Переменная для отслеживания количества найденных нулей
for char in string:
if char == "0":
zero_count += 1
# Если найдено более двух нулей, обновляем текущую подстроку
if zero_count > 2:
current_length = 0
current_substring = ""
zero_count = 1
current_length += 1
current_substring += char
# Если длина текущей подстроки больше длины максимальной подстроки,
# обновляем значения максимальной длины и подстроки
if current_length > max_length:
max_length = current_length
max_substring = current_substring
return max_substring, max_length
# Пример использования
string = "0a0bc00d04efgrt0habc0"
max_substring, length = find_max_substring(string)
print("Максимальная подстрока:", max_substring)
print("Длина подстроки:", length)
Нейросеть не учла символ d в искомой подстроке, а значит и все символы (не равные 0), которые были бы в этом месте. Но попытка хорошая 👌 (тем более, что в один цикл).