Как вывести самую длинную строку в python
Перейти к содержимому

Как вывести самую длинную строку в python

  • автор:

Найти самую длинную строку текста и заменить её пустой строкой

Найти самую длинную строку текста и заменить её пустой строкой
Найти самую длинную строку текста и заменить её пустой строкой.

Найти самую короткую строку текста и заменить её
Найти самую короткую строку текста и заменить её фразой "С Новым годом!"

Удалить из текста находящегося в файле. самую длинную строку
Попытался сделать вот так, вроде самое просто задание с определением длинной строки и ее.

Найти самую короткую строку текста и заменить ее заданной фразой
Найти самую короткую строку текста и заменить её фразой "С Новым годом!"

Добавить в конец текста, находящегося в файле, самую длинную строку
Добавить в конец текста, находящегося в файле, самую длинную строку. <html <head>.

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Найти самую длинную строку
Дано 5 строк, найти их длины и сохранить в массив.C++

Найти самую длинную строку
/* Самая длинная строка 1. Создай список строк. + 2. Считай с клавиатуры 5 строк и добавь в.

Найти самую длинную строку
2. Ввести n строк с консоли. Найти самую длинную строку. Вывести найденную строку и ее длину. В.

Найти самую длинную строку в файле
Собственно прога находит самую длинную строку в файле, но если длинных строк несколько то выводит.

Найти самую длинную строку в файле
Вроде все норм, вот только когда пытаюсь вывести через puts() — выводит все содержимое файла.

Найти в файле самую длинную строку и вывести ее на экран

Найти в файле самую длинную строку и вывести ее на экран
Дан текстовый файл. Найти в нем самую большую (по длине) строку и вывести ее на экран.

Открыть заданный текстовый файл, найти в нем и вывести на экран самую длинную строку
Открыть заданный текстовый файл, найти в нем и вывести на экран самую длинную строку. Имя файла.

Найти самую длинную строку в файле
Для файла f1 содержащего символьную информацию, найдите самую длинную строку. Вроде правильно но.

Найти самую длинную строку в файле
Вроде все норм, вот только когда пытаюсь вывести через puts() — выводит все содержимое файла.

3540 / 2144 / 566
Регистрация: 02.09.2015
Сообщений: 5,435
belyansky,

1 2 3 4 5 6 7
def main(): filename = input() with open(filename) as f: print(max(f, key = len)) if __name__ == "__main__": main()

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Найти самую длинную строку в файле
Есть задача: Дан произвольный файл с некоторым количеством строк. Найти самую длинную строку и.

Найти самую длинную строку в файле
Собственно прога находит самую длинную строку в файле, но если длинных строк несколько то выводит.

Найти и удалить самую длинную строку в файле
Всем привет, столкнулся с задачей, в которой нужно скопировать текст одного файла в другой, удалив.

Найти самую длинную строку в файле и ее длину
Дан текстовый файл. Найти самую длинную строку и ее длину.

В текстовом файле найти самую короткую строку и вывести её на экран
Я кое-как смог только вывести на экран строки и то почему-то последняя каждый раз утраивается. Как.

В произвольном текстовом файле найти самую длинную строку
Всем доброго времени суток! Наконец-то дошли руки до изучения C#) Изучаю самостоятельно. Дошел до.

Найти самую длинную строку, которая является подстрокой всех слов

Требуется написать программу, которая принимает несколько слов, и нам нужно найти то, которое чаще всего повторяется. Подскажите, есть ли какие-нибудь функции? А то понятия не имею как это написать Пример ввода: Sample Samplin SamplingsFun Saplingdsajisfasfijoi Пример вывода: Sampl

Отслеживать
892 6 6 серебряных знаков 21 21 бронзовый знак
задан 22 ноя 2020 в 14:00
3 3 3 бронзовых знака
Задача не поставлена нормально. Кроме того, нужно показать свои размышления и попытки
22 ноя 2020 в 14:11
Ваши-то идеи где?
22 ноя 2020 в 14:16

Учебные задания допустимы в качестве вопросов только при условии, что вы пытались решить их самостоятельно перед тем, как задать вопрос. Пожалуйста, отредактируйте вопрос и укажите, что именно вызвало у вас трудности при решении задачи. Например, приведите код, который вы написали, пытаясь решить задачу

22 ноя 2020 в 14:16

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Судя по вашему вопросу ваш преподаватель не ждет от вас использование каких-либо «готовых функций». Это классическая задача на алгоритмы. Она сводится к нахождению общей подстроки попарно между всеми имеющимися строками. Алгоритм примерно такой:

  1. Берете первые 2 слова (обозначим их длины x1 и x2) и строите матрицу (двумерный массив) размером x1+1 на x2+1
  2. Заполняете первый столбец матрицы нулями
  3. Заполняете первую строку матрицы нулями
  4. Заполняете клетки на пересечении разных букв нулями
  5. Заполняете клетки на пересечении одинаковых букв значением равным значению на пересечении двух предыдущих индексов плюс 1 (то есть если сейчас вы смотрите индексы 5 и 7 и в заголовках этих двух индексов одинаковые буквы, то вы берете значение из клетки 4 и 6 и прибавляете к нему 1 и результат записываете в клетку с индексом 5 и 7)

Все пункты с 2 по 5 само собой делаются за один раз в двух вложенных циклах. После чего ваша таблица для первой пары слов готова.

  1. Находите в полученной матрице самое большое число.
  2. . и двигаясь по диагонали от него ( каждый раз уменьшая оба индекса на единицу переписываете посимвольно любой из заголовков матрицы — это и есть повторяющиеся символы в этой паре строк)

В итоге после сравнения первых двух слов у вас есть общая строка для этой пары, третью строку можно уже сравнивать с полученной подстрокой и тем самым уточнить полученный результат и так далее. Но нужно учитывать, что подстрок может оказаться несколько и тогда лучше отслеживать все варианты — лишние в ходе проверок сами должны отсеяться.

P.S.: Задача на столько типовая, что по ней и ей подобным есть целый ворох статей в вики, главное правильно сформулировать вопрос!

Решаем кодом: найти самую длинную вложенную строку

Продолжаем разбирать задачи с сайта LeetCode. На этот раз — посложнее:

Есть строка s — нужно найти длину самой длинной подстроки, в которой каждый символ используется только один раз.

если s = «abcabcbb», то ответ будет 3, потому что строка без повторений — это «abc»;

если s = «bbbbb», то ответ будет 1, потому что самая длинная подстрока тут будет из одного символа;

если s = «pwwkew», то ответ будет 3, потому что тут две самые одинаково длинные подстроки — «wke» и «kew», в которых по 3 символа.

Такие алгоритмы иногда используются для выявления закономерностей и поиска общих элементов, поэтому их тоже могут спросить на собеседованиях.

Решение: использовать встроенные функции для работы со строками

Самое простое решение — собирать отдельную подстроку из символов и смотреть каждый раз, есть очередной символ в этой подстроке или нет. Если нет — добавляем его в конец и смотрим дальше. А если очередной символ там уже есть, то в подстроке оставляем только то, что идёт после этого символа, и добавляем туда текущий.

Например, если у нас в подстроке хранится «abcdf» и мы снова встречаем b, то делаем так:

  1. Получаем номер символа b в подстроке → он равен 1 (если интересно, почему не 2, — почитайте, почему счёт в программировании начинается с нуля, а не с единицы).
  2. Формируем новую строку, начиная с 1 символа и до конца → «cdf».
  3. Добавляем к ней в конец наш текущий символ b → «cdfb».

Так шаг за шагом мы проверим все вложенные строки и найдём самую длинную без повторов. Звучит сложно, но в коде всё выглядит гораздо проще. Почитайте комментарии, чтобы разобраться в каждом шаге:

# исходная строка s = 'abcabcdcc' # здесь будет наш ответ res = 0 # на старте у нас пустая подстрока sub = '' # перебираем все символы в исходной строке for char in s: # если символа нет в подстроке if char not in sub: # добавляем его туда sub += char # смотрим, максимальный ли это результат, и если да — запоминаем его res = max(res, len(sub)) # если символ в подстроке есть else: # получаем индекс текущего символа в подстроке cut = sub.index(char) # сокращаем нашу подстроку: оставляем только то, что идёт после символа-дубликата, и добавляем к строке текущий символ sub = sub[cut+1:] + char # выводим результат на экран print(res)

Решение: проверить всю вложенную строку

Зайдём с другой стороны — напишем функцию, которая будет проверять, есть в указанной подстроке повторяющиеся символы или нет. Логика будет такая:

  1. Передаём в функцию начальный и конечный индекс, который определяет границы подстроки.
  2. Заводим массив, в который будем складывать проверенные символы и проверять на дубли.
  3. По очереди проверяем все символы в указанном диапазоне и смотрим, есть ли очередной символ в нашем массиве.
  4. Если есть — выводим False, что означает, что в подстроке есть повторяющиеся символы.
  5. Если символа нет — добавляем его в наш массив.
  6. Если мы проверили все символы и ни одного не было в том массиве — возвращаем True, то есть повторов нет.

Теперь запишем это на Python:

# исходная строка s = 'abcabcdcc' # функция, которая проверит, есть ли в подстроке повторяющиеся символы # на вход отправляем начальную и конечную позицию в строке для проверки def check(start, end): # создаём пустое множество chars = set() # делаем цикл от начального до конечного символа for i in range(start, end + 1): # получаем очередной символ из строки c = s[i] # если символа уже есть в множестве if c in chars: # возвращаем False — в строке есть повторяющиеся символы return False # добавляем символ в множество chars.add(c) # если дошли досюда — возвращаем True return True

Теперь перейдём к основной части. Раз мы научились проверять, есть повторы в подстроке или нет, то нам остаётся только найти и проверить все вложенные строки. Сделаем это обычным перебором с вложенным циклом: будем проверять все подстроки, сначала начиная с первого символа, потом со второго и так далее. При этом мы будем каждый раз считать и запоминать максимальную длину подстроки без повторов, которая у нас получилась:

# --- основной алгоритм --- # получаем длину строки n = len(s) # здесь будет наш ответ res = 0 # перебираем символы от первого до последнего for i in range(n): # перебираем символы от текущего до последнего for j in range(i, n): # если в получившейся подстроке нет повторяющихся символов if check(i, j): # смотрим, максимальный ли это результат, и если да — запоминаем его res = max(res, j - i + 1) # выводим результат на экран print(res)

Объединим обе части и получим готовый код:

# исходная строка s = 'abcabcdcc' # функция, которая проверит, есть ли в подстроке повторяющиеся символы # на вход отправляем начальную и конечную позицию в строке для проверки def check(start, end): # создаём пустое множество chars = set() # делаем цикл от начального до конечного символа for i in range(start, end + 1): # получаем очередной символ из строки c = s[i] # если символа уже есть в множестве if c in chars: # возвращаем False — в строке есть повторяющиеся символы return False # добавляем символ в множество chars.add(c) # если дошли досюда — возвращаем True return True # --- основной алгоритм --- # получаем длину строки n = len(s) # здесь будет наш ответ res = 0 # перебираем символы от первого до последнего for i in range(n): # перебираем символы от текущего до последнего for j in range(i, n): # если в получившейся подстроке нет повторяющихся символов if check(i, j): # смотрим, максимальный ли это результат, и если да — запоминаем его res = max(res, j - i + 1) # выводим результат на экран print(res)

Хотите больше? Скачивайте наш гид

В нем мы собрали всё, что нужно знать о старте в сфере ИТ. Читайте на компьютере и телефоне, распечатывайте на принтере, пересылайте друзьям, используйте как учебное пособие в вузе и школе.

Гид скачивается бесплатно, без регистрации и ввода электронной почты. Просто тык и всё. Не забудьте сохранить на компьютере, если гид откроется в браузере.

Хотите больше? Скачивайте наш гид Хотите больше? Скачивайте наш гид

Получите ИТ-профессию

В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *