สมมติว่าเรามีสตริง S และเราต้องเขียนตัวอักษรของสตริงที่กำหนดจากซ้ายไปขวาลงในบรรทัด ที่นี่แต่ละบรรทัดมีความกว้างสูงสุด 100 หน่วย และหากการเขียนจดหมายจะทำให้ความกว้างของบรรทัดเกิน 100 หน่วย ก็จะถูกเขียนในบรรทัดถัดไป นอกจากนี้เรายังมีความกว้างของอาร์เรย์ โดยที่ width[0] คือความกว้างของ 'a', width[1] คือความกว้างของ 'b'และอื่นๆ
เราต้องหาคำตอบของคำถามสองข้อ -
- มีอักขระจาก S อย่างน้อย 1 ตัวกี่บรรทัด
- เส้นสุดท้ายใช้ความกว้างเท่าไหร่
เราจะส่งคืนคำตอบเป็นรายการจำนวนเต็มของความยาว 2
ดังนั้นหากอินพุตเป็นเช่น[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" จะครอบคลุม 9 * 10 + 2 * 4 =98 ช่องว่าง สำหรับ 'a' สุดท้าย จะเขียนในบรรทัดที่สอง เนื่องจากเหลือเพียง 2 หน่วยในบรรทัดแรก คำตอบคือ 2 บรรทัด บวก 4 หน่วยในบรรทัดที่สอง
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- บรรทัด :=1 นับ :=0
- สำหรับแต่ละ i ใน S ทำ
- จำนวน :=นับ + ความกว้าง[ASCII ของ i - 97]
- ถ้านับ> 100 แล้ว
- line :=line + 1
- จำนวน :=ความกว้าง[ASCII ของ i - 97]
- กลับ [บรรทัด นับ]
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution:def numberOfLines(self, widths, S):line =1 count =0 for i in S:count +=widths[ord(str(i))-97] if count> 100:line +=1 จำนวน =widths[ord(str(i))-97] return [line, count]ob =Solution()print(ob.numberOfLines([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], "bbbcccdddaaa"))
อินพุต
<ก่อน>[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],"bbbcccdddaaa"ผลลัพธ์
[2, 4]