Text Justification
Input:
words = ["This", "is", "an", "example", "of", "text", "justification."]
maxWidth = 16
Output:
[
"This is an",
"example of text",
"justification. "
]Last updated
Input:
words = ["This", "is", "an", "example", "of", "text", "justification."]
maxWidth = 16
Output:
[
"This is an",
"example of text",
"justification. "
]Last updated
Input:
words = ["What","must","be","acknowledgment","shall","be"]
maxWidth = 16
Output:
[
"What must be",
"acknowledgment ",
"shall be "
]
Explanation: Note that the last line is "shall be " instead of "shall be",
because the last line must be left-justified instead of fully-justified.
Note that the second line is also left-justified becase it contains only one word.Input:
words = ["Science","is","what","we","understand","well","enough","to","explain",
"to","a","computer.","Art","is","everything","else","we","do"]
maxWidth = 20
Output:
[
"Science is what we",
"understand well",
"enough to explain to",
"a computer. Art is",
"everything else we",
"do "
]class Solution {
public List<String> fullJustify(String[] words, int maxWidth) {
List<String> res = new ArrayList<>();
if(words == null || words.length == 0)
return res;
int index = 0;
while(index < words.length){
int countLen = words[index].length();
int last = index+1;
//找到一行能放几个词,循环后 last指在放在下一行的第一个词
while(last < words.length){
if(countLen + words[last].length() + 1 > maxWidth){
break;
}
countLen += 1+words[last].length();
last++;
}
//开始组词
StringBuilder builder = new StringBuilder();
builder.append(words[index]);
//计算单词之间的空儿,不是空格
int diff = last - index - 1;
//判断尾端情况
if(last == words.length || diff == 0){
for(int i = index + 1; i < last;i++){
builder.append(" ");
builder.append(words[i]);
}
for(int i = builder.length();i < maxWidth;i++){
builder.append(" ");
}
}else{
int space = (maxWidth - countLen)/diff;
int r = (maxWidth - countLen)%diff;
for(int i = index + 1; i <last ;i++){
for(int j = space; j >0; j--){
builder.append(" ");
}
if(r > 0){
builder.append(" ");
r--;
}
builder.append(" ");//因为countLen的时候算了一个空格,和这里要对应
builder.append(words[i]);
}
}
res.add(builder.toString());
index = last;
}
return res;
}
}