题目描述:输入一个字符串数组,每个字符串代表一个英文单词;以及一个正整数L,代表每行的长度。要求按照L进行排版,按顺序处理每一行时,行中尽可能放下最多的单词。单词间如果有额外的空格,空格要平均在单词间分配,如果无法平均分配,则将多余的空格在左边依次分配。
题目描述已经很详细了,直接实现即可。
代码:
vector<string> fullJustify(vector<string>& words, int maxWidth) {
vector<string> result;
if(maxWidth == 0) {
result.push_back("");
return result;
}
string line;
int index = 0;
while(index < words.size()) {
int begin = index;
int end = index + 1;
int num = words[begin].length();
line = "";
while(index < words.size()) {
index++;
if(index < words.size() && num + 1 + words[index].length() <= maxWidth) {
num += 1 + words[index].length();
end = index + 1;
}
else {
end = index;
break;
}
}
int space = maxWidth - (num - (end - begin - 1));
int spacePerWord;
if(end > begin + 1)
spacePerWord = space / (end - begin - 1);
if(index == words.size())
spacePerWord = 1;
line += words[begin];
for(int i = begin + 1 ; i < end ; i++) {
for(int j = 0 ; j < spacePerWord ; j++) {
line += ' ';
}
if(index < words.size() && (i - begin - 1) < space % (end - begin - 1))
line += ' ';
line += words[i];
}
if(end == begin + 1) {
while(space--) {
line += ' ';
}
}
if(index == words.size()) {
while(line.length() < maxWidth)
line += ' ';
}
result.push_back(line);
}
return result;
}