Repository navigation
Expand file tree
/
Copy path0068.cpp
More file actions
54 lines (52 loc) · 1.41 KB
/
Copy path0068.cpp
File metadata and controls
54 lines (52 loc) · 1.41 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
class Solution {
public:
vector<string> fullJustify(vector<string>& words, int maxWidth) {
int len = words.size(), index = 0;
vector<string> result;
while (index < len) {
int num = maxNumber(words, maxWidth, index);
string row = justified(words, maxWidth, index, num);
result.push_back(row);
index += num;
}
return result;
}
int maxNumber(vector<string>& words, int maxWidth, int index) {
int result = 1, current = words[index].size();
for (int i = index + 1; i < words.size(); ++ i) {
int len = words[i].size();
if (current + len + 1 > maxWidth) {
break;
}
current += len + 1;
++ result;
}
return result;
}
string justified(vector<string>& words, int maxWidth, int index, int num) {
string result;
int wordLen = 0;
for (int i = 0; i < num; ++ i) {//统计有效单词的数量
wordLen += words[i + index].size();
}
int spaceNum = maxWidth - wordLen;
for (int i = 0; i < num; ++ i) {
result += words[i + index];
if (result.size() < maxWidth) {
int evenSpaceNum = num == 1 ? spaceNum : spaceNum / (num - 1);
if (index + num == words.size()) {//最后一行要特殊处理
evenSpaceNum = 1;
} else if (num > 1 && i < spaceNum % (num - 1 ) ) {
++ evenSpaceNum;
}
for (int j = 0; j < evenSpaceNum; ++ j) {
result.push_back(' ');
}
}
}
while (result.size() < maxWidth) {
result.push_back(' ');
}
return result;
}
};