Разбор задачи: Количество строк для записи строки

Предложенный нами код решения:

 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.

Шаги решения:

  1. Инициализация переменных:
    • max_width = 100: это максимальная ширина одной строки в пикселях.
    • lines = 1: изначально требуется хотя бы одна строка для записи текста.
    • current_width = 0: текущая ширина строки, начинаем с нуля.
  2. Обработка каждого символа в строке 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
        

        Просто добавляем ширину символа к текущей строке.

  3. Возврат результата:
    • После обработки всех символов возвращаем результат в виде массива:

      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 пикселя.

 



Вы должны Войти или Зарегистрироваться чтобы оставлять комментарии