【一天一道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 ...
随机推荐
- ERP中的地区管理
地区管理 地区管理主要实现地区数据的添加.编辑.查看.启用.禁用等功能,另外还包含地区选择控件封装. 业务功能点: 地区数据查看:地区列表树状展现,列表增加省.市.区.县.乡图标. 地区选择控件:选择 ...
- python常用执行方式&变量&input函数
linux系统中执行py文件方式: ./a.py 需要执行权限 chmod -R 777(最大权限) 常用执行方式: 1. ./a.py2. python a.py 文件内部头加上 #!/usr/b ...
- LintCode题解之判断是否为平方数之和
简单粗暴 public class Solution { /* * @param : the given number * @return: whether whether there're two ...
- PHP 5 SimpleXML 函数
PHP SimpleXML 简介 SimpleXML 扩展提供了一种获取 XML 元素的名称和文本的简单方式,只要您知道 XML 文档的布局. SimpleXML 转换 XML 文档到 SimpleX ...
- ejabberd开发和部署
ejabberd开发和部署 (金庆的专栏 2016.10) 搭建了自己的ejabberd集群,然后少量更改源码,实现定制的XMPP服务器. 从github fork ejabberd 库,定为 mas ...
- sublime 安装package control
import urllib.request,os,hashlib; h = '2915d1851351e5ee549c20394736b442' + '8bc59f460fa1548d15146761 ...
- iOS开源加密相册Agony的实现(五)
简介 虽然目前市面上有一些不错的加密相册App,但不是内置广告,就是对上传的张数有所限制.本文介绍了一个加密相册的制作过程,该加密相册将包括多密码(输入不同的密码即可访问不同的空间,可掩人耳目).Wi ...
- Objective-C特有类型——id
Objective-C特有类型--id OC里,id和int.double等一样,是一个类型 不同的是: id是一个万能指针,能指向/操作任何OC对象 相当于 (NSObject *) 用法 id i ...
- Android艺术开发探索第三章——View的事件体系(上)
Android艺术开发探索第三章----View的事件体系(上) 我们继续来看这本书,因为有点长,所以又分了上下,你在本片中将学习到 View基础知识 什么是View View的位置参数 Motion ...
- Django extra 和 annotate
>>> qs=Question.objects.extra(select={'anum': 'SELECT COUNT(*) FROM questions_answer WHERE ...