806. Number of Lines To Write String
Question 806
https://leetcode.com/problems/number-of-lines-to-write-string/description/
We are to write the letters of a given string S
, from left to right into lines. Each line has maximum width 100 units, and if writing a letter would cause the width of the line to exceed 100 units, it is written on the next line. We are given an array widths
, an array where widths[0] is the width of 'a', widths[1] is the width of 'b', ..., and widths[25] is the width of 'z'.
Now answer two questions: how many lines have at least one character from S
, and what is the width used by the last such line? Return your answer as an integer list of length 2.
Example :
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:
All letters have the same length of 10. To write all 26 letters,
we need two full lines and one line with 60 units.
Example :
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:
All letters except 'a' have the same length of 10, and
"bbbcccdddaa" will cover 9 * 10 + 2 * 4 = 98 units.
For the last 'a', it is written on the second line because
there is only 2 units left in the first line.
So the answer is 2 lines, plus 4 units in the second line.
Answer
v1. use ord() + two conditional (26.02%)
用字母的 ascii code 相減來帶出 widths
如果剛好是 100 就換行
如果會超過 100 也換行,並將該字母移至下行
v2. use ord() + one conditional (100%)
將 'a' 的 ascii code 提出來當變數
在 for 裡面只跑一個 if 當超過 100 就換行,剛好是 100 時就會在下一次相加時進 if
最後再檢查一次,最後一行是不是滿了
class Solution(object):
def numberOfLines(self, widths, S):
total,raw = 0, 1
for s in S:
total += widths[ord(s)-ord('a')]
if(total == 100):
total = 0
raw += 1
elif(total > 100):
total = widths[ord(s)-ord('a')]
raw +=1
return [raw, total]
Last updated