leetcode@ [68] Text Justification (String Manipulation)
https://leetcode.com/problems/text-justification/
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 L characters.
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.
A line other than the last line might contain only one word. What should you do in this case?
In this case, that line should be left-justified.
class Solution {
public:
string func(int len) {
string res = "";
while(len--) res += " ";
return res;
}
vector<string> fullJustify(vector<string>& words, int maxWidth) {
vector<string> res; res.clear();
//Assuming that the length of longest string in the words must be shorter or equal to maxWidth.
int len = ;
int i = , size = words.size();
while(i < size) {
if(len + words[i].length() == maxWidth) {
len = ;
res.push_back(words[i]);
++i;
}
else if(len + words[i].length() < maxWidth) {
len = len + words[i].length();
int left = i;
while(i+ < words.size() && len++words[i+].length() <= maxWidth) {
len += +words[i+].length();
++i;
}
len = ;
int right = i, tot_len = , tot_empty_len, each_empty_len, remain_empty_len;
for(int k = left;k <= right; ++k) tot_len += words[k].length();
tot_empty_len = maxWidth - tot_len;
each_empty_len = (left == right)? tot_empty_len: tot_empty_len / (right-left);
remain_empty_len = tot_empty_len - each_empty_len * (right-left);
string r = "";
if(left == right) {
string tmp = func(tot_empty_len);
r += words[left] + tmp;
res.push_back(r);
}
else {
string tmp;
if(right <= size - ) {
for(int k = left; k <= right - ; ++k) {
if(remain_empty_len > ) {
tmp = func(each_empty_len+);
remain_empty_len--;
}
else tmp = func(each_empty_len);
r += words[k] + tmp;
}
r += words[right];
res.push_back(r);
}
else {
for(int k = left; k <= right - ; ++k) {
tmp = func();
r += words[k] + tmp;
}
r += words[right];
if(r.length() < maxWidth) r += func(maxWidth - r.length());
res.push_back(r);
}
}
++i;
}
}// end while
return res;
}
};
leetcode 68: Text Justification
leetcode@ [68] Text Justification (String Manipulation)的更多相关文章
- [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
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...
- 【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 ...
随机推荐
- hdu 1849 Rabbit and Grass 博弈论
水题,转化Nim 代码如下: #include<iostream> #include<stdio.h> #include<algorithm> #include&l ...
- [java]2015上海邀请赛 B Base64
题意: 给n和一个字符串(可以有空格) 求字符串编码n次后的字符串 编码方式:字符串的每个字符转化成ASCII码, ASCII码转化成8位2进制, 将二进制数分割成6位为一组的(不够的补0), ...
- SQLite入门与分析(一)---简介
写在前面:出于项目的需要,最近打算对SQLite的内核进行一个完整的剖析,在此希望和对SQLite有兴趣的一起交流.我知道,这是一个漫长的过程,就像曾经去读Linux内核一样,这个过程也将是辛苦的,但 ...
- java:I/O 根据用户输入反馈信息
import java.io.*; class userInputIO{ //Java中成员变量有默认初始化,也就是如果不显式设置初始值的话就会被初始化为其类型的默认值(0.false.null等). ...
- 产生WM_PAINT 消息
UpdateWindow会检查窗口的Update Region,当其不为空时才发送WM_PAINT消息:RedrawWindow则给我们更多的控制:是否重画非客户区和背景,是否总是发送WM_PAINT ...
- minitools
1.android 2.linux 3.luoji 4.windows CE ----
- 【HDOJ】4652 Dice
1. 题目描述对于m面的骰子.有两种查询,查询0表示求最后n次摇骰子点数相同的期望:查询1表示最后n次摇骰子点数均不相同的期望. 2. 基本思路由期望DP推导,求得最终表达式.(1) 查询0 不 ...
- 【HDOJ】5296 Annoying problem
LCA+RMQ.挺不错的一道题目. 思路是如何通过LCA维护费用.当加入新的点u是,费用增量为dis[u]-dis[lca(u, lower_u)] - dis[lca(u, greater_u)] ...
- 【原创】ZYNQ学习笔记(一) HelloWorld实现
拿过ZYNQ开发板,里面给了很多部件,果断从网上下载了手册,N多手册和原理图. 要比Spartan-6复杂多了,耐心地看了看,知道ZYNQ系列分为PS(系统)以及PL(逻辑)部分. 之前,自己一直在做 ...
- Android开发UI之手动显示和隐藏软键盘
1.方法一(如果输入法在窗口上已经显示,则隐藏,反之则显示) InputMethodManager imm = (InputMethodManager) getSystemService(Contex ...