描述
Given an array of words and a length L, format the text such that each line has exactly L characters
and is fully (le and right) justified.
You should pack your words in a greedy approach; that is, pack as many words as you can in each line.
Pad extra spaces ' ' when necessary so that each line has exactly L characters.
Extra spaces between words should be distributed as evenly as possible. If the number of spaces on a
line do not divide evenly between words, the empty slots on the le will be assigned more spaces than the
slots on the right.
For the last line of text, it should be le justified and no extra space is inserted between words.
For example,
words: [”This”, ”is”, ”an”, ”example”, ”of”, ”text”, ”justification.”]
L: 16.
Return the formaed lines as:
[
"This is an",
"example of text",
"justification. "
]
Note: Each word is guaranteed not to exceed L in length.
Corner Cases:
A line other than the last line might contain only one word. What should you do in this case?
In this case, that line should be left.
Given an array of words and a length L, format the text such that each line has exactly L characters
and is fully (le and right) justified.
You should pack your words in a greedy approach; that is, pack as many words as you can in each line.
Pad extra spaces ' ' when necessary so that each line has exactly L characters.
Extra spaces between words should be distributed as evenly as possible. If the number of spaces on a
line do not divide evenly between words, the empty slots on the le will be assigned more spaces than the
slots on the right.
For the last line of text, it should be le justified and no extra space is inserted between words.
For example,
words: [”This”, ”is”, ”an”, ”example”, ”of”, ”text”, ”justification.”]
L: 16.
Return the formaed lines as:
[
"This is an",
"example of text",
"justification. "
]
Note: Each word is guaranteed not to exceed L in length.
Corner Cases:
A line other than the last line might contain only one word. What should you do in this case?
In this case, that line should be left.
#include<iostream>
#include<string>
#include<vector>
using namespace std;
void TextJustification(vector<string> text, int len)
{
for (int i = 0; i<text.size();)
{
int j = i;
int sum = text[i].size();
while (sum<len&&j<text.size())
{
j++;
if (j<text.size())
sum += text[j].size() + 1;
}
if (j == text.size())//last line
{
int L = 0;
for (int k = i; k<j; k++)
{
cout << text[k] << " ";
L += text[k].size() + 1;
}
while (L<text.size())
{
cout << " "; L++;
}
cout << endl;
return;
}
else if (sum>len)// non last line
{
if (j - i == 1)
{
cout << text[i];
for (int k = 0; k<len - text[i].size(); k++)
cout << " ";
}
else
{
int L = 0;
int sum = 0;
for (int k = i; k<j; k++)
{
sum += text[k].size();
}
int cnt = (len - sum) / (j - i - 1);
int pre = (len - sum) % (j - i - 1);
for (int k = i; k<j; k++)
{
cout << text[k];
L += text[k].size();
if (L<len)
{
L += cnt;
for (int m = 0; m<cnt; m++)
{
cout << " ";
}
if (pre)
{
L += 1;
cout << " ";
pre = pre - 1;
}
}
}
}
cout << endl;
i = j;
}
}
}
int main()
{
string s1 = "This";
string s2 = "is";
string s3 = "an";
string s4 = "exampleaaaaaaa";
string s5 = "of";
string s6 = "text";
string s7 = "justification";
vector<string> text;
text.push_back(s1);
text.push_back(s2);
text.push_back(s3);
text.push_back(s4);
text.push_back(s5);
text.push_back(s6);
text.push_back(s7);
TextJustification(text, 16);
}