Text Justification
68. Text Justification
Given an array of words and a width
maxWidth, format the text such that each line as exactlymaxWidthcharacters and is fully (left and right) justified.
题目的意思是, 给一个数组, 数组里面有$n$个单词, 把这些单词按照maxWidth行存放. 每一行的两端要对齐.
需要注意的是
- 单词的顺序不能改变
- 如果一行之后一个单词, 那么这个单词要左对齐
- 如果空格不能均匀分布在所有间隔当中, 则左边的空格需要比右边的空格多
- 每行要尽可能多的放单词
思路
其实这类型的题目没有什么精巧的算法可以做. 它的难点在于, 要处理的corner case太多, 比较繁琐. 对于这道题目, 几个需要解决的地方如下:
一行要放多少单词?
- 每一行单词的总长度加上最少空格数量应当小于等于
maxWidth
- 每一行单词的总长度加上最少空格数量应当小于等于
知道每一行的单词数量空格需要怎么分配?
- 每一行的空格数量是
maxWidth减去该行单词的总长度 - 每一行可以填空格的地方是单词数量-1
- 多余的空格优先添加到左边单词的间隔当中
- 每一行的空格数量是
Code
1 | def fullJustify(words, maxWidth): |
EOF