【一天一道LeetCode】#68. Text Justification
一天一道LeetCode
本系列文章已全部上传至我的github,地址:ZeeCoder‘s Github
欢迎大家关注我的新浪微博,我的新浪微博
欢迎转载,转载请注明出处
(一)题目
Given an array of words and a length L, format the text such that each line has exactly L characters and is fully (left and right) justified.
You should pack your words in a greedy approach; that is, pack as many words as you can in each line. Pad extra spaces ’ ’ when necessary so that each line has exactly Lcharacters.
Extra spaces between words should be distributed as evenly as possible. If the number of spaces on a line do not divide evenly between words, the empty slots on the left will be assigned more spaces than the slots on the right.
For the last line of text, it should be left justified and no extra space is inserted between words.
For example,
words: [“This”, “is”, “an”, “example”, “of”, “text”, “justification.”]
L: 16.Return the formatted lines as:
[
“This is an”,
“example of text”,
“justification. ”
]
Note: Each word is guaranteed not to exceed L in length.
(二)解题
题目大意:按照一定的格式对文本进行对齐。
需要注意以下几点:
1、只有一个单词直接在后面补空格,如“a”,5 输出“a ”
2、最后一组单词不需要对齐,如“a”,“b” 5 输出“a b ”
3、单词与单词之间至少要有一个空格隔开
具体 思路见代码注释:
class Solution {
public:
vector<string> fullJustify(vector<string>& words, int maxWidth) {
vector<string> ret;//返回值
int width = words[0].size();
int num = 1;
int last = 0 ;//纪录每一次maxWidth的起始序号
for(int i = 1 ; i<words.size() ; i++)
{
width+=words[i].size();
num++;
if(width+num-1>maxWidth)//这里要注意每个单词之间要用空格隔开
{
width-=words[i].size();//清除掉最后一个数
num--;
string temp;
if(num==1){//只有一个单词的情况
temp+=words[i-1];
while(temp.size()!=maxWidth) temp+=" ";//在后面补齐空格
ret.push_back(temp);
}
else//多个单词,但不是结尾的情况
{
int blankWidth = maxWidth - width;
int gap = 0;
for(int j = last ; j < i ; j++)
{
if(j==i-1) gap=0;//最后一个单词后面不加空格
else {
gap = blankWidth/(num-1);//每一次进来都要算需要增加多少空格
gap = blankWidth%(num-1)>0?gap+1:gap;//保证均匀分布
blankWidth -=gap;
}
temp+=words[j];
while(gap>0&&gap--) temp+=" ";
num--;
}
ret.push_back(temp);
}
//初始化下一个循环
last=i;
width = words[i].size();
num=1;
}
}
if(last<words.size()){//考虑末尾不足maxWidth的情况
int j = last;
string temp;
while(j<words.size()){//先按一个空格添加words
temp+=words[j++];
if(temp.size()<maxWidth) temp+=" ";
}
while(temp.size()<maxWidth) temp+=" ";//最后不足maxWidth就用空格补足
ret.push_back(temp);
}
return ret;
}
};
【一天一道LeetCode】#68. Text Justification的更多相关文章
- leetcode@ [68] Text Justification (String Manipulation)
https://leetcode.com/problems/text-justification/ Given an array of words and a length L, format the ...
- [LeetCode] 68. Text Justification 文本对齐
Given an array of words and a length L, format the text such that each line has exactly L characters ...
- [leetcode]68. Text Justification文字对齐
Given an array of words and a width maxWidth, format the text such that each line has exactly maxWid ...
- Leetcode#68 Text Justification
原题地址 没有复杂的算法,纯粹的模拟题 先试探,计算出一行能放几个单词 然后计算出单词之间有几个空格,注意,如果空格总长度无法整除空格数,前面的空格长度通通+1 最后放单词.放空格,组成一行,加入结果 ...
- 【LeetCode】68. Text Justification
Text Justification Given an array of words and a length L, format the text such that each line has e ...
- 68. Text Justification
题目: Given an array of words and a length L, format the text such that each line has exactly L charac ...
- LeetCode OJ——Text Justification
http://oj.leetcode.com/problems/text-justification/ 编译代码要看warnings!它提供了可能出问题的情况,比如类型转换上unsigned int ...
- 【leetcode】Text Justification
Text Justification Given an array of words and a length L, format the text such that each line has e ...
- 【leetcode】Text Justification(hard) ☆
Given an array of words and a length L, format the text such that each line has exactly L characters ...
随机推荐
- 使用ffmpeg转码时遇到aac报错
今天尝试用ffmpeg转一个视频的格式,结果报出这个错误: The encoder 'aac' is experimental but experimental codecs are not enab ...
- C stat函数的用法举例(转载)
stat函数讲解表头文件: #include <sys/stat.h> #include <unistd.h>定义函数: int stat( ...
- Node.js ZLIB
Zlib 稳定性: 3 - 文档 可以通过以下方式访问这个模块: var zlib = require('zlib'); 这个模块提供了对 Gzip/Gunzip, Deflate/Inflate, ...
- Go 错误处理
Go 语言通过内置的错误接口提供了非常简单的错误处理机制. error类型是一个接口类型,这是它的定义: type error interface { Error() string } 我们可以在编码 ...
- PHP 5 MySQLi 函数
在 PHP 中使用 MySQLi 函数需要注意的是:你需要添加对 MySQLi 扩展的支持. PHP MySQLi 简介 PHP MySQLi = PHP MySQL Improved! MySQLi ...
- Python3 循环
Python中的循环语句有 for 和 while. Python循环语句的控制结构图如下所示: while 循环 Python中while语句的一般形式: while 判断条件: statement ...
- Winform DevExpress控件库(一) DevExpress控件库的安装与新建第一个DevExpress项目
前言:因为这段时间要接触到DevExpress控件库,而我本身甚至对winform的控件都了解甚少,所以处在学习中,写下博客主要是为了方便后期的回顾,当然也可以给一些新人第一次接触时做为学习的参考,以 ...
- npm killed有可能是内存不够, 为Ubuntu增加swap
参考 http://www.cnblogs.com/owenyang/p/4282283.html 查看swap使用策略 cat /proc/sys/vm/swappiness 0代表尽量使用物理内存 ...
- Spark:Spark 编程模型及快速入门
http://blog.csdn.net/pipisorry/article/details/52366356 Spark编程模型 SparkContext类和SparkConf类 代码中初始化 我们 ...
- Spring基础配置
从毕业到现在我一直从事Android开发,但是对JavaEE一直念念不忘,毕业校招的时候,一个礼拜拿了三个offer,岗位分别是Android.JavaEE和JavaSE,后来觉得Android比较简 ...