Text Justification
原题链接Text Justification
将以这个字符串数组重组成几行,每个字符串用空格分隔,要求
- 每行的长度相同
- 每行的空格需要均匀分配,且每个单词之间至少有一个空格
- 最后一行尽量将空格放在最后面
首先思路是记录已遍历到的单词的总长度,判断是否还能容纳当前遍历到的这个单词。
- 如果能,即之前总长度加上这个单词长度以及一个分隔空格没有超过规定长度,继续遍历下一个
- 如果不能,那么就将之前遍历到的所有单词组成一行,改行需要满足上面三个约束
可以用两个下标指针记录当前遍历到的单词,[front, back)表示这个范围的单词可以组成一行,而加上back后则不能。
难点在计算每个单词之间空格的数量,均匀分布空格的意思是
- 假设保证每块空格长度相同的前提下还剩余n个空格,那么就将前n块空格的每个空格长度加一
[front, back)表示这个范围有back - front - 1个单词,len记录这个范围的长度(注,这个长度计算了一个空格在里面,即每个单词之间至少有一个空格,这个空格长度计算在len中了)
那么每个单词之间均匀的空格数应该是(maxWidth - len) / (back - front - 1) + 1
+1表示将len中记录的用于分隔的单词加上
但是,对于最后一行,因为要保证空格尽量在后面,其实就是保证每个单词之间只能有一个空格。
所以计算单词之间空格数量的方法为
int spaces = 1