# 文本左右对齐

<div class="notranslate">
  <p>给定一个单词数组和一个长度&nbsp;<em>maxWidth</em>，重新排版单词，使其成为每行恰好有&nbsp;<em>maxWidth</em>&nbsp;个字符，且左右两端对齐的文本。</p>

  <p>你应该使用“贪心算法”来放置给定的单词；也就是说，尽可能多地往每行中放置单词。必要时可用空格&nbsp;<code>' '</code>&nbsp;填充，使得每行恰好有 <em>maxWidth</em>&nbsp;个字符。
  </p>

  <p>要求尽可能均匀分配单词间的空格数量。如果某一行单词间的空格不能均匀分配，则左侧放置的空格数要多于右侧的空格数。</p>

  <p>文本的最后一行应为左对齐，且单词之间不插入<strong>额外的</strong>空格。</p>

  <p><strong>说明:</strong></p>

  <ul>
    <li>单词是指由非空格字符组成的字符序列。</li>
    <li>每个单词的长度大于 0，小于等于&nbsp;<em>maxWidth</em>。</li>
    <li>输入单词数组 <code>words</code>&nbsp;至少包含一个单词。</li>
  </ul>

  <p><strong>示例:</strong></p>

  <pre><strong>输入:</strong>
    words = ["This", "is", "an", "example", "of", "text", "justification."]
    maxWidth = 16
<strong>输出:</strong>
    [
    &nbsp; &nbsp;"This &nbsp; &nbsp;is &nbsp; &nbsp;an",
    &nbsp; &nbsp;"example &nbsp;of text",
    &nbsp; &nbsp;"justification. &nbsp;"
    ]
    </pre>

  <p><strong>示例&nbsp;2:</strong></p>

  <pre><strong>输入:</strong>
    words = ["What","must","be","acknowledgment","shall","be"]
    maxWidth = 16
<strong>输出:</strong>
    [
    &nbsp; "What &nbsp; must &nbsp; be",
    &nbsp; "acknowledgment &nbsp;",
    &nbsp; "shall be &nbsp; &nbsp; &nbsp; &nbsp;"
    ]
<strong>解释: </strong>注意最后一行的格式应为 "shall be    " 而不是 "shall     be"
    因为最后一行应为左对齐，而不是左右两端对齐，第二行同样为左对齐，这是因为这行只包含一个单词。
    </pre>

  <p><strong>示例&nbsp;3:</strong></p>

  <pre><strong>输入:</strong>
    words = ["Science","is","what","we","understand","well","enough","to","explain",
    &nbsp;        "to","a","computer.","Art","is","everything","else","we","do"]
    maxWidth = 20
<strong>输出:</strong>
    [
    &nbsp; "Science &nbsp;is &nbsp;what we",
      "understand &nbsp; &nbsp; &nbsp;well",
    &nbsp; "enough to explain to",
    &nbsp; "a &nbsp;computer. &nbsp;Art is",
    &nbsp; "everything &nbsp;else &nbsp;we",
    &nbsp; "do &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;"
    ]
    </pre>
</div>

以下程序实现了这一功能，请你填补空白处内容：

```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]
```