Программа курса:
Разбор задачи: Количество строк для записи строки
Предложенный нами код решения:
def numberOfLines(widths, s):
"""
:type widths: List[int]
:type s: str
:rtype: List[int]
"""
max_width = 100
lines = 1
current_width = 0
for char in s:
char_width = widths[ord(char) - ord('a')]
if current_width + char_width > max_width:
lines += 1
current_width = char_width
else:
current_width += char_width
return [lines, current_width]Данная задача заключается в определении количества строк, необходимых для записи строки s, при условии, что каждая строка может содержать не более 100 пикселей, а ширина каждого символа задана массивом widths.
Шаги решения:
- Инициализация переменных:
max_width = 100: это максимальная ширина одной строки в пикселях.lines = 1: изначально требуется хотя бы одна строка для записи текста.current_width = 0: текущая ширина строки, начинаем с нуля.
- Обработка каждого символа в строке
s:Для каждого символа в строке определяем его ширину:
char_width = widths[ord(char) - ord('a')]Здесь используется ASCII-код символа для определения его позиции в массиве
widths. Например, для символа'a'результатord('a') - ord('a')будет равен 0, что соответствует первому элементу массиваwidths.- Проверка возможности добавления символа в текущую строку:
Если ширина текущей строки плюс ширина символа превышает 100 пикселей:
if current_width + char_width > max_width:Это означает, что символ не помещается в текущую строку, и необходимо перейти на новую строку. В таком случае:
- Увеличиваем количество строк:
lines += 1. - Начинаем новую строку с ширины текущего символа:
current_width = char_width.
- Увеличиваем количество строк:
Если символ помещается:
else: current_width += char_widthПросто добавляем ширину символа к текущей строке.
- Возврат результата:
После обработки всех символов возвращаем результат в виде массива:
return [lines, current_width]Здесь
lines— общее количество строк, аcurrent_width— ширина последней строки в пикселях.
Пример выполнения:
Пример 1:
- Входные данные:
widths = [10] * 26,s = "abcdefghijklmnopqrstuvwxyz".
Каждая буква имеет ширину 10 пикселей, а строка содержит 26 символов. - Ход выполнения:
- Первые 10 символов занимают 100 пикселей (первая строка).
- Следующие 10 символов занимают ещё 100 пикселей (вторая строка).
- Оставшиеся 6 символов занимают 60 пикселей (третья строка).
- Вывод:
[3, 60]— три строки, последняя строка шириной 60 пикселей.
Пример 2:
- Входные данные:
widths = [4, 10, 10, 10, ...],s = "bbbcccdddaaa". - Ход выполнения:
- Первая строка содержит символы
"bbbcccdddaa", занимает 98 пикселей. - Последний символ
"a"переходит на вторую строку, занимает 4 пикселя.
- Первая строка содержит символы
- Вывод:
[2, 4]— две строки, последняя строка шириной 4 пикселя.