[case of algorithm thousand questions] daily LeetCode punch in - 96. The number of lines required to write a string

Posted by aamirshah on Wed, 05 Jan 2022 00:18:53 +0100 preface

Algorithm problem

• Punching out an algorithm problem every day is not only a learning process, but also a sharing process
• Tip: the problem-solving programming languages in this column are C# and Java
• To maintain a state of learning every day, let's work together to become the great God of algorithm
• Today is the 96th day of punching out the force deduction algorithm

Algorithm problem

Sample of the original question: the number of lines required to write a string

We should write the given string S on each line from left to right. The maximum width of each line is 100 units. If we make this line more than 100 units when writing a letter, we should write this letter to the next line.

We give an array widths. The array widths represents the units required by 'a', the array widths represents the units required by 'b', and the array widths represents the units required by 'z'.

Now answer two questions: at least how many lines can put down S, and how many units of width does the last line use? Return your answer as a list of integers of length 2.

Example 1:

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]
explain:
All characters have the same occupation unit 10. So write all 26 letters,
We need 2 whole lines and one line occupying 60 units.

Example 2:

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]
explain:
Remove letters'a'All characters are the same unit 10, and the string "bbbcccdddaa" 9 will be overwritten * 10 + 2 * 4 = 98 Units.
Last letter 'a' It will be written to the second line because there are only 2 units left in the first line.
So, the answer is 2 lines, and the second line has 4 unit widths.

Tips:

• The length of string S is in the range of [1, 1000].
• S contains only lowercase letters.
• widths is an array with a length of 26.
• The values of widths[i] range from [2, 10].

C# method: traversal

Traverse s first, and restart one line when each line is greater than 100

code:

public class Solution {
public int[] NumberOfLines(int[] widths, string s) {
int[] res = new int;
int num = 0;
int n = 1;
for (int i = 0; i < s.Length; i++)
{
if (100-num>= widths[s[i] - 'a'])
{
num += widths[s[i] - 'a'];
}
else
{
num = 0;
num += widths[s[i] - 'a'];
n++;
}

}
res = n;
res = num;
return res;
}
}

results of enforcement

Execution time: 128 ms，At all C# Beat 90.00% of users in submission
Memory consumption: 39.4 MB，At all C# Defeated 70.90% of users in submission

Java method: simple traversal

Train of thought analysis We traverse each letter in the string S from left to right, and use the lines (width) to count the current answer in real time.

When traversing a letter X, if width + widths[x] < = 100, update the width and keep the lines unchanged; If width + widths[x] > 100, the value of lines is increased by 1 and the width is set to widths[x].

code:

class Solution {
public int[] numberOfLines(int[] widths, String S) {
int lines = 1, width = 0;
for (char c: S.toCharArray()) {
int w = widths[c - 'a'];
width += w;
if (width > 100) {
lines++;
width = w;
}
}

return new int[]{lines, width};
}
}

results of enforcement

Execution time: 0 ms，At all Java  Defeated 100 in submission.00%User
Memory consumption: 36.3 MB，At all Java Beat 75 in submission.50%User

Complexity analysis

Time complexity: O( n )
Space complexity: O(1)

summary

• Today is the 96th day of punching out the force deduction algorithm!
• This paper uses C# and Java programming languages to solve problems
• Some methods are also written by Likou God, and they are also shared while learning. Thanks again to the algorithm bosses
• That's the end of today's algorithm sharing. See you tomorrow!