forked from xiaoyaoworm/Leetcode-java
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy path68_fullJustify.java
82 lines (75 loc) · 2.57 KB
/
68_fullJustify.java
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
public class Solution {
public List<String> fullJustify(String[] words, int maxWidth) {
List<List<String>> res = new ArrayList<List<String>>();
List<Integer> occupied = new ArrayList<Integer>();
List<String> list = new ArrayList<String>();
int num = 0;
for (String word : words) {
if (num == 0 && word.length() <= maxWidth) {
list.add(word);
num = word.length();
} else if (num + word.length() + 1 <= maxWidth) {
list.add(word);
num += word.length() + 1;
} else {
res.add(list);
occupied.add(num);
list = new ArrayList<String>();
if (word.length() <= maxWidth) {
list.add(word);
num = word.length();
}
}
}
res.add(list);
occupied.add(num);
return convert(res, occupied, maxWidth);
}
private List<String> convert(List<List<String>> list, List<Integer> occupied, int maxWidth) {
List<String> res = new ArrayList<String>();
StringBuffer sb = null;
for (int i = 0; i < list.size() - 1; i++) {
sb = new StringBuffer();
List<String> current = list.get(i);
int num = current.size();
int extraSpace = maxWidth-occupied.get(i);
int averageExtra = 0;
int moreExtra = 0;
if(num!=1){
averageExtra = extraSpace/(num-1);
moreExtra = extraSpace%(num-1);
}
sb.append(current.get(0));
for (int j = 1; j < num; j++) {
sb.append(" ");
int k = 0;
while (k < averageExtra) {
sb.append(" ");
k++;
}
if (moreExtra > 0) {
sb.append(" ");
moreExtra--;
}
sb.append(current.get(j));
}
while (sb.length() < maxWidth) {
sb.append(" ");
}
res.add(sb.toString());
}
if (list.size() > 0) {
List<String> lastLine = list.get(list.size() - 1);
sb = new StringBuffer();
for (String str : lastLine) {
if (sb.length() != 0) sb.append(" ");
sb.append(str);
}
while (sb.length() < maxWidth) {
sb.append(" ");
}
res.add(sb.toString());
}
return res;
}
}