-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathP_68.java
More file actions
55 lines (51 loc) · 1.82 KB
/
Copy pathP_68.java
File metadata and controls
55 lines (51 loc) · 1.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package leetcode.hard;
import java.util.ArrayList;
import java.util.List;
@SuppressWarnings("StringRepeatCanBeUsed")
public class P_68 {
public List<String> fullJustify(String[] words, int maxWidth) {
final List<String> res = new ArrayList<>();
int start = 0;
for (int i = 0, currRow = 0; i < words.length; i++) {
if (currRow + words[i].length() > maxWidth) {
currRow--;
res.add(formatRow(words, start, i, maxWidth - currRow));
start = i;
currRow = 0;
}
currRow += words[i].length() + 1;
}
final StringBuilder lastLine = new StringBuilder();
for (int i = start; i < words.length; i++) {
lastLine.append(words[i]);
if (i != words.length - 1) {
lastLine.append(' ');
}
}
final int length = lastLine.length();
for (int j = 0; j < maxWidth - length; j++) { lastLine.append(' '); }
res.add(lastLine.toString());
return res;
}
private static String formatRow(String[] words, int start, int end, int spaces) {
final StringBuilder sb = new StringBuilder();
if (end - start == 1) {
sb.append(words[start]);
for (int j = 0; j < spaces; j++) { sb.append(' '); }
return sb.toString();
}
final int space = spaces / (end - start - 1);
int remainder = spaces % (end - start - 1);
for (int i = start; i < end; i++) {
sb.append(words[i]);
if (i != end - 1) {
for (int j = 0; j <= space; j++) { sb.append(' '); }
if (remainder > 0) {
sb.append(' ');
remainder--;
}
}
}
return sb.toString();
}
}