# LeetCode 806. Number of Lines To Write String

## Description

https://leetcode.com/problems/number-of-lines-to-write-string/

You are given a string `s` of lowercase English letters and an array `widths` denoting how many pixels wide each lowercase English letter is. Specifically, `widths` is the width of `'a'``widths` is the width of `'b'`, and so on.

You are trying to write `s` across several lines, where each line is no longer than `100` pixels. Starting at the beginning of `s`, write as many letters on the first line such that the total width does not exceed `100` pixels. Then, from where you stopped in `s`, continue writing as many letters as you can on the second line. Continue this process until you have written all of `s`.

Return an array `result` of length 2 where:

• `result` is the total number of lines.
• `result` is the width of the last line in pixels.

Example 1:

```Input: widths = [10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10], s = "abcdefghijklmnopqrstuvwxyz"
Output: [3,60]
Explanation: You can write s as follows:
abcdefghij  // 100 pixels wide
klmnopqrst  // 100 pixels wide
uvwxyz      // 60 pixels wide
There are a total of 3 lines, and the last line is 60 pixels wide.```

Example 2:

```Input: widths = [4,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10], s = "bbbcccdddaaa"
Output: [2,4]
Explanation: You can write s as follows:
bbbcccdddaa  // 98 pixels wide
a            // 4 pixels wide
There are a total of 2 lines, and the last line is 4 pixels wide.```

Constraints:

• `widths.length == 26`
• `2 <= widths[i] <= 10`
• `1 <= s.length <= 1000`
• `s` contains only lowercase English letters.

## Explanation

Iterate the characters in string and build lines. Count the total number of lines and create new lines if character total width is greater than 100.

## Python Solution

``````class Solution:
def numberOfLines(self, widths: List[int], s: str) -> List[int]:

lines_counter = {}

line_width = 0
line_count = 0

for c in s:
w = widths[ord(c) - ord('a')]

if line_width + w <= 100:
line_width = line_width + w
lines_counter[line_count] = line_width
else:
line_count += 1
lines_counter[line_count] = w
line_width = w

return [line_count + 1, lines_counter[line_count]]
``````
• Time Complexity: O(N).
• Space Complexity: O(N).