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.

Corner Cases:

  • 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.

将由单词组成的数组,按每行最多L个字符进行对齐调整。

解法:先找到某一行能放下的单词,单词的字母数之和加上单词之间的空格要小于等于L,然后需要补充空格的话在填进去空格。假设有n个单词,那么就会有n-1个间隔,每个间隔的空格数应该是:(L-此行所有单词的长度和)/(n-1)。只用一个单词的话,排好单词在补上空格即可。

参考:喜刷刷

Java:

public List<String> fullJustify(String[] words, int L) {
List<String> res = new ArrayList<>();
int n = words.length;
char[] spaces = new char[L];
Arrays.fill(spaces, ' ');
for(int i=0; i<n; i++) {
int len = words[i].length();
int j = i;
while(i<n-1 && len+1+words[i+1].length()<=L) {
len += 1+words[++i].length();
}
StringBuilder sb = new StringBuilder(words[j]);
if(j == i || i==n-1) {
while(i==n-1 && j < i) {
sb.append(" "+words[++j]);
}
sb.append(spaces, 0, L-sb.length());
} else {
int avg = (L-len)/(i-j);
int rem = (L-len)%(i-j);
while(j < i) {
sb.append(spaces, 0, avg+1);
if(rem-- > 0) sb.append(" ");
sb.append(words[++j]);
}
}
res.add(sb.toString());
}
return res;
}  

Python:

class Solution(object):
def fullJustify(self, words, maxWidth):
"""
:type words: List[str]
:type maxWidth: int
:rtype: List[str]
"""
def addSpaces(i, spaceCnt, maxWidth, is_last):
if i < spaceCnt:
# For the last line of text, it should be left justified,
# and no extra space is inserted between words.
return 1 if is_last else (maxWidth // spaceCnt) + int(i < maxWidth % spaceCnt)
return 0 def connect(words, maxWidth, begin, end, length, is_last):
s = [] # The extra space O(k) is spent here.
n = end - begin
for i in xrange(n):
s += words[begin + i],
s += ' ' * addSpaces(i, n - 1, maxWidth - length, is_last),
# For only one word in a line.
line = "".join(s)
if len(line) < maxWidth:
line += ' ' * (maxWidth - len(line))
return line res = []
begin, length = 0, 0
for i in xrange(len(words)):
if length + len(words[i]) + (i - begin) > maxWidth:
res += connect(words, maxWidth, begin, i, length, False),
begin, length = i, 0
length += len(words[i]) # Last line.
res += connect(words, maxWidth, begin, len(words), length, True),
return res  

C++:

class Solution {
public:
vector<string> fullJustify(vector<string>& words, int maxWidth) {
int cnt = 0, left = 0;
vector<string> result;
for(int i =0; i< words.size(); i++)
{
cnt += words[i].size();
if(cnt+i-left > maxWidth || i+1==words.size())
{
if(cnt+i-left > maxWidth) cnt -= words[i--].size();
string str = words[left];
for(int j = left+1; j<= i; j++)
{
int m = maxWidth-cnt, n = i-left;
if(i+1==words.size()) str += " ";
else str.append(m/n + (j-left-1<m % n), ' ');
str += words[j];
}
str.append(maxWidth-str.size(), ' ');
result.push_back(str);
left = i+1, cnt = 0;
}
}
return result;
}
};

  

All LeetCode Questions List 题目汇总

[LeetCode] 68. Text Justification 文本对齐的更多相关文章

  1. [leetcode]68. Text Justification文字对齐

    Given an array of words and a width maxWidth, format the text such that each line has exactly maxWid ...

  2. leetcode@ [68] Text Justification (String Manipulation)

    https://leetcode.com/problems/text-justification/ Given an array of words and a length L, format the ...

  3. [Leetcode] text justification 文本对齐

    Given an array of words and a length L, format the text such that each line has exactly L characters ...

  4. Text Justification,文本对齐

    问题描述:把一个集合的单词按照每行L个字符放,每行要两端对齐,如果空格不能均匀分布在所有间隔中,那么左边的空格要多于右边的空格,最后一行靠左对齐. words: ["This", ...

  5. Leetcode#68 Text Justification

    原题地址 没有复杂的算法,纯粹的模拟题 先试探,计算出一行能放几个单词 然后计算出单词之间有几个空格,注意,如果空格总长度无法整除空格数,前面的空格长度通通+1 最后放单词.放空格,组成一行,加入结果 ...

  6. [LeetCode] Text Justification 文本左右对齐

    Given an array of words and a length L, format the text such that each line has exactly L characters ...

  7. 【一天一道LeetCode】#68. Text Justification

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...

  8. Text Justification 文本左右对齐

    Given an array of words and a length L, format the text such that each line has exactly L characters ...

  9. 【LeetCode】68. Text Justification

    Text Justification Given an array of words and a length L, format the text such that each line has e ...

随机推荐

  1. C# 获取操作系统空闲时间

    获取系统鼠标和键盘没有任何操作的空闲时间 public class CheckComputerFreeState { /// <summary> /// 创建结构体用于返回捕获时间 /// ...

  2. .Net Core控制台生成exe能独立运行

    .Net Core控制台生成exe能独立运行,依赖文件都单独生成在一个publish文件夹里 方式一:强烈推荐,能独立运行,依赖DLL也会生成出来,支持无安装环境也能到处运行 按win+R输入cmd在 ...

  3. 编程小白入门分享一:git的最基本使用

    git简介 引用了网上的一张图,这张图清晰表达git的架构.workspace是工作区,可以用编辑器直接编辑其中的文件:Index/Stage是暂存区,编辑后的文件可以添加到(add)暂存区:Repo ...

  4. 学习Spring-Data-Jpa(十)---注解式方法查询之@Query、@Modifying与派生delete

    1.@Query 对于少量的查询,使用@NamedQuery在实体上声明查询是一种有效的办法,并且可以很好的工作.由于查询本身绑定到执行它们的java方法,实际上可以通过Spring-Data-Jpa ...

  5. LeetCode 1139. Largest 1-Bordered Square

    原题链接在这里:https://leetcode.com/problems/largest-1-bordered-square/ 题目: Given a 2D grid of 0s and 1s, r ...

  6. 好的想法只是OKR的开始--创业者谨记

    每一个出版过作品的作家都有这样的体验:有人找到你,说他有一个极妙的想法,并迫不及待的想和你一起实现这个想法:结局也总是差不多,它们艰难的完成了灵感部分,而你只需要简单的把它写成小说,收益则需要五五分成 ...

  7. WinDbg常用命令系列---单步执行p*

    p (Step) p命令执行单个指令或源代码行,并可选地显示所有寄存器和标志的结果值.当子例程调用或中断发生时,它们被视为单个步骤. 用户模式: [~Thread] p[r] [= StartAddr ...

  8. Nodejs中的JavaScript

    一.Ecmascript ①基本语法:if var function Object Array等 ②特别注意:Node.js中没有DOM和BOM 二.核心模块: 1.Node.js为JavaScrip ...

  9. Xamarin 自定义OnKeyDown 再按一次退出程序的实现

    private DateTime? lastBackKeyDownTime; public override bool OnKeyDown(Keycode keyCode, KeyEvent e) { ...

  10. pyqt5 + pyinstaller 制作爬虫小程序

    环境:mac python3.7 pyqt5 pyinstaller ps: 主要是熟悉pyqt5, 加入了单选框 输入框 文本框 文件夹选择框及日历下拉框 效果图: pyqt5 主程序文件 # -* ...