【CSDN Daily Practice】【贪心】文本左右对齐
- 思路 :贪心,从左往右找到拼接长度 最接近maxWidth的
N
个单词,然后做空白格填充,迭代收集所有组,返回结果 - Java实现
class Solution {
public List<String> fullJustify(String[] words, int maxWidth) {
List<String> ret = new ArrayList<>();
int index = 0;
while (index < words.length) {
int cur = index, len = 0;
while (cur < words.length && len + words[cur].length() + cur - index <= maxWidth) {
len = len + words[cur++].length();
}
cur--;
StringBuilder sb = new StringBuilder();
if (cur == words.length - 1) {
for (int i = index; i <= cur; i++) {
sb.append(words[i]);
if (i < cur) {
sb.append(' ');
}
}
} else {
int base = cur > index ? (maxWidth - len) / (cur - index) : (maxWidth - len);
String baseStr = genSpace(base);
int left = cur > index ? (maxWidth - len) % (cur - index) : 0;
String leftStr = genSpace(base + 1);
for (int i = index; i <= cur; i++) {
sb.append(words[i]);
if (i < cur) {
sb.append(left > 0 ? leftStr : baseStr);
left--;
}
}
}
if (sb.length() < maxWidth) {
sb.append(genSpace(maxWidth - sb.length()));
}
ret.add(sb.toString());
index = cur + 1;
}
return ret;
}
private String genSpace(int n) {
char[] cs = new char[n];
Arrays.fill(cs, ' ');
return new String(cs);
}
}
- 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