題目來源:https://leetcode-cn.com/problems/number-of-lines-to-write-string/
我們要把給定的字符串 S 從左到右寫到每一行上枚荣,每一行的最大寬度為100個(gè)單位,如果我們?cè)趯懩硞€(gè)字母的時(shí)候會(huì)使這行超過了100 個(gè)單位,那么我們應(yīng)該把這個(gè)字母寫到下一行。我們給定了一個(gè)數(shù)組 widths 季俩,這個(gè)數(shù)組 widths[0] 代表 'a' 需要的單位灯谣, widths[1] 代表 'b' 需要的單位,...同廉, widths[25] 代表 'z' 需要的單位埋心。
現(xiàn)在回答兩個(gè)問題:至少多少行能放下S指郁,以及最后一行使用的寬度是多少個(gè)單位?將你的答案作為長度為2的整數(shù)列表返回拷呆。
示例 1:
輸入:
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"
輸出: [3, 60]
示例 2:
輸入:
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"
輸出: [2, 4]
解釋:
除去字母'a'所有的字符都是相同的單位10坡氯,并且字符串 "bbbcccdddaa" 將會(huì)覆蓋 9 * 10 + 2 * 4 = 98 個(gè)單位.
最后一個(gè)字母 'a' 將會(huì)被寫到第二行,因?yàn)榈谝恍兄皇O?個(gè)單位了洋腮。
所以箫柳,這個(gè)答案是2行,第二行有4個(gè)單位寬度啥供。
注意:
- 字符串 S 的長度在 [1, 1000] 的范圍悯恍。
- S 只包含小寫字母。
- widths 是長度為 26的數(shù)組伙狐。
- widths[i] 值的范圍在 [2, 10]涮毫。
思路:
簡單遍歷一遍字符串,注意維護(hù)行數(shù)和當(dāng)前行widths兩個(gè)變量即可贷屎,需要注意python轉(zhuǎn)ASCII碼的操作罢防。
O(n)時(shí)間復(fù)雜度,O(1)空間復(fù)雜度唉侄。
class Solution:
def numberOfLines(self, widths: List[int], S: str) -> List[int]:
unit = 100
line = 1
for s in S:
s_unit = widths[ord(s)-97]
if unit - s_unit >= 0:
unit -= s_unit
else:
unit = 100
line += 1
unit -= s_unit
return line, 100 - unit