|
| 1 | +package com.fishercoder.solutions; |
| 2 | + |
| 3 | +/** |
| 4 | + * 806. Number of Lines To Write String |
| 5 | +
|
| 6 | + We are to write the letters of a given string S, from left to right into lines. |
| 7 | + 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. |
| 8 | + 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'. |
| 9 | +
|
| 10 | + Now answer two questions: |
| 11 | + how many lines have at least one character from S, |
| 12 | + and what is the width used by the last such line? |
| 13 | + Return your answer as an integer list of length 2. |
| 14 | +
|
| 15 | + Example : |
| 16 | + Input: |
| 17 | + 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] |
| 18 | + S = "abcdefghijklmnopqrstuvwxyz" |
| 19 | + Output: [3, 60] |
| 20 | + Explanation: |
| 21 | + All letters have the same length of 10. To write all 26 letters, |
| 22 | + we need two full lines and one line with 60 units. |
| 23 | +
|
| 24 | + Example : |
| 25 | + Input: |
| 26 | + 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] |
| 27 | + S = "bbbcccdddaaa" |
| 28 | + Output: [2, 4] |
| 29 | + Explanation: |
| 30 | + All letters except 'a' have the same length of 10, and |
| 31 | + "bbbcccdddaa" will cover 9 * 10 + 2 * 4 = 98 units. |
| 32 | + For the last 'a', it is written on the second line because |
| 33 | + there is only 2 units left in the first line. |
| 34 | + So the answer is 2 lines, plus 4 units in the second line. |
| 35 | +
|
| 36 | + Note: |
| 37 | + The length of S will be in the range [1, 1000]. |
| 38 | + S will only contain lowercase letters. |
| 39 | + widths is an array of length 26. |
| 40 | + widths[i] will be in the range of [2, 10]. |
| 41 | +
|
| 42 | + */ |
| 43 | +public class _806 { |
| 44 | + public static class Solution1 { |
| 45 | + public int[] numberOfLines(int[] widths, String S) { |
| 46 | + int numOfLines = 1; |
| 47 | + int offsetInCurrentLine = 0; |
| 48 | + for (char c : S.toCharArray()) { |
| 49 | + if (offsetInCurrentLine + widths[c - 'a'] < 100) { |
| 50 | + offsetInCurrentLine += widths[c - 'a']; |
| 51 | + } else if (offsetInCurrentLine + widths[c - 'a'] == 100) { |
| 52 | + numOfLines++; |
| 53 | + offsetInCurrentLine = 0; |
| 54 | + } else { |
| 55 | + numOfLines++; |
| 56 | + offsetInCurrentLine = widths[c - 'a']; |
| 57 | + } |
| 58 | + } |
| 59 | + return new int[] {numOfLines, offsetInCurrentLine}; |
| 60 | + } |
| 61 | + } |
| 62 | +} |
0 commit comments