每天一道LeetCode-----将单词数组分成多行,每行长度相同,单词之间用空格分隔,要求空格尽量均匀分布

本文介绍了一道LeetCode题目,涉及如何将单词数组按照特定规则组成多行,每行长度相同且空格均匀分布。文章详细阐述了解题思路,包括计算单词间空格数的方法以及处理最后一行特殊情况的策略。
摘要由CSDN通过智能技术生成

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值