import java.util.ArrayList;
import java.util.List;
class Solution {
public List<String> fullJustify(String[] words, int maxWidth) {
List<String> ans = new ArrayList<>();
int len = words.length;
int now = words[0].length();
int st = 0;
for (int i = 1; i < len; i++) {
// 预留一个空格位
int add = now + words[i].length() + 1;
if (add <= maxWidth) {
now = add;
} else {
if (i - st == 1) {
ans.add(appendOne(words, st, maxWidth));
} else {
ans.add(merge(words, st, i, maxWidth, now));
}
now = words[i].length();
st = i;
}
}
if (now != 0) {
ans.add(appendFinal(words, st, maxWidth));
}
return ans;
}
String merge(String[] words, int st, int ed, int maxWidth, int all) {
// 加上之前预留的空格
int average = (maxWidth - all) / (ed - st - 1) + 1;
int mod = (maxWidth - all) % (ed - st - 1);
StringBuilder blank = new StringBuilder();
for (int i = 0; i < average; i++) {
blank.append(" ");
}
StringBuilder ans = new StringBuilder(words[st]);
for (int i = st + 1; i < ed; i++) {
ans.append(blank);
if (mod > 0) {
mod--;
ans.append(" ");
}
ans.append(words[i]);
}
return ans.toString();
}
String appendFinal(String[] words, int st, int maxWidth) {
StringBuilder ans = new StringBuilder(words[st]);
for (int i = st + 1; i < words.length; i++) {
ans.append(" ").append(words[i]);
}
while (ans.length() != maxWidth) {
ans.append(" ");
}
return ans.toString();
}
String appendOne(String[] words, int st, int maxWidth) {
StringBuilder ans = new StringBuilder(words[st]);
while (ans.length() != maxWidth) {
ans.append(" ");
}
return ans.toString();
}
}
01-06
2470
04-12
868
09-19
2万+