给定一个单词数组和一个长度 maxWidth,重新排版单词,使其成为每行恰好有 maxWidth 个字符,且左右两端对齐的文本。
你应该使用“贪心算法”来放置给定的单词;也就是说,尽可能多地往每行中放置单词。必要时可用空格 ' '
填充,使得每行恰好有 maxWidth 个字符。
要求尽可能均匀分配单词间的空格数量。如果某一行单词间的空格不能均匀分配,则左侧放置的空格数要多于右侧的空格数。
文本的最后一行应为左对齐,且单词之间不插入额外的空格。
说明:
- 单词是指由非空格字符组成的字符序列。
- 每个单词的长度大于 0,小于等于 maxWidth。
- 输入单词数组
words
至少包含一个单词。
示例:
输入:
words = ["This", "is", "an", "example", "of", "text", "justification."]
maxWidth = 16
输出:
[
"This is an",
"example of text",
"justification. "
]
示例 2:
输入:
words = ["What","must","be","acknowledgment","shall","be"]
maxWidth = 16
输出:
[
"What must be",
"acknowledgment ",
"shall be "
]
解释: 注意最后一行的格式应为 "shall be " 而不是 "shall be"
因为最后一行应为左对齐,而不是左右两端对齐,第二行同样为左对齐,这是因为这行只包含一个单词。
示例 3:
输入:
words = ["Science","is","what","we","understand","well","enough","to","explain",
"to","a","computer.","Art","is","everything","else","we","do"]
maxWidth = 20
输出:
[
"Science is what we",
"understand well",
"enough to explain to",
"a computer. Art is",
"everything else we",
"do "
]
以下程序实现了这一功能,请你填补空白处内容:
```python
class Solution(object):
def fullJustify(self, words, maxWidth):
"""
:type words: List[str]
:type maxWidth: int
:rtype: List[str]
"""
res = []
res_list = []
curr = []
count, pos = 0, 0
while pos < len(words):
word = words[pos]
if len(word) > maxWidth:
pos += 1
if len(word) + count + len(curr)<= maxWidth:
count += len(word)
curr.append(word)
pos += 1
else:
res_list.append(curr)
curr = []
count = 0
if len(curr) > 0:
res_list.append(curr)
for index, curr in enumerate(res_list):
text = ''
remain = sum([len(t) for t in curr])
if len(curr) == 1:
text = curr[0] + ' ' * (maxWidth - remain)
elif index == len(res_list) - 1:
text = ' '.join(curr)
text += ' ' * (maxWidth - remain - len(curr) + 1)
else:
___________________________
res.append(text)
return res
if __name__ == '__main__':
s = Solution()
print (s.fullJustify(["Don't","go","around","saying","the","world","owes","you","a","living;","the","world","owes","you","nothing;","it","was","here","first."],30))
```
## template
```python
class Solution(object):
def fullJustify(self, words, maxWidth):
"""
:type words: List[str]
:type maxWidth: int
:rtype: List[str]
"""
res = []
res_list = []
curr = []
count, pos = 0, 0
while pos < len(words):
word = words[pos]
if len(word) > maxWidth:
pos += 1
if len(word) + count + len(curr)<= maxWidth:
count += len(word)
curr.append(word)
pos += 1
else:
res_list.append(curr)
curr = []
count = 0
if len(curr) > 0:
res_list.append(curr)
for index, curr in enumerate(res_list):
text = ''
remain = sum([len(t) for t in curr])
if len(curr) == 1:
text = curr[0] + ' ' * (maxWidth - remain)
elif index == len(res_list) - 1:
text = ' '.join(curr)
text += ' ' * (maxWidth - remain - len(curr) + 1)
else:
step = (maxWidth - remain) / (len(curr) - 1 )
extra = (maxWidth - remain) % (len(curr) - 1 )
for index in range(len(curr) - 1):
text += curr[index] + ' ' * int(step)
if extra > 0:
text += ' '
extra -= 1
text += curr[-1]
res.append(text)
return res
if __name__ == '__main__':
s = Solution()
print (s.fullJustify(["Don't","go","around","saying","the","world","owes","you","a","living;","the","world","owes","you","nothing;","it","was","here","first."],30))
```
## 答案
```python
step = (maxWidth - remain) / (len(curr) - 1 )
extra = (maxWidth - remain) % (len(curr) - 1 )
for index in range(len(curr) - 1):
text += curr[index] + ' ' * int(step)
if extra > 0:
text += ' '
extra -= 1
text += curr[-1]
```
## 选项
### A
```python
step = (maxWidth - remain) / (len(curr) - 1 )
extra = (maxWidth - remain) % (len(curr) - 1 )
for index in range(len(curr) - 1):
text += curr[index] + ' ' * int(step)
if extra > 0:
text += ' '
extra += 1
text += curr[-1]
```
### B
```python
step = (maxWidth - remain) / (len(curr) - 1 )
extra = (maxWidth - remain) % (len(curr) - 1 )
for index in range(len(curr) - 1):
text += curr[index] + ' ' * int(step)
if extra > 0:
text += ' '
extra -= 1
text += curr[1]
```
### C
```python
step = (maxWidth - remain) / (len(curr) - 1 )
extra = (maxWidth - remain) % (len(curr) - 1 )
for index in range(len(curr) - 1):
text += curr[index] + ' ' * int(step)
if extra > 0:
text += ' '
extra += 1
text += curr[1]
```