代碼1
Runtime: 1 ms, faster than 52.72% of Java online submissions for Text Justification.
class Solution {
public List<String> fullJustify(String[] words, int maxWidth) {
int left = 0;
List<String> list = new ArrayList();
while (left < words.length) {
int right = findRight(left, words, maxWidth);
list.add(justify(left, right, words, maxWidth));
left = right + 1;
}
return list;
}
public int findRight(int left, String[] words, int maxWidth) {
int right = left + 1;
int sum = words[left].length();
while (right < words.length &&
(sum + words[right].length() + 1 <= maxWidth)) {
sum += words[right++].length() + 1;
}
return right - 1;
}
public String justify(int left, int right, String[] words, int maxWidth) {
if (right == left) return padResult(words[left], maxWidth);
boolean isLastLine = right == words.length - 1;
int numSpace = right - left;
int totalSpace = maxWidth - wordsLength(left, right, words);
String space = isLastLine ? " " : blank(totalSpace / numSpace);
int remainder = isLastLine ? 0 : totalSpace % numSpace;
StringBuffer sb = new StringBuffer();
for (int i = left; i <= right; i++) {
sb.append(words[i]).append(space).append(remainder-- > 0 ? " " : "");
}
return padResult(sb.toString().trim(), maxWidth);
}
public int wordsLength(int left, int right, String[] words) {
int res = 0;
for (int i = left; i <= right; i++) {
res += words[i].length();
}
return res;
}
public String padResult(String word, int maxWidth) {
return word + blank(maxWidth - word.length());
}
public String blank(int length) {
return new String(new char[length]).replace('\0',' ');
}
}