68. Text Justification一行单词 两端对齐
[抄题]:
Given an array of words and a width maxWidth, format the text such that each line has exactly maxWidth 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 maxWidth 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.
Note:
- A word is defined as a character sequence consisting of non-space characters only.
- Each word's length is guaranteed to be greater than 0 and not exceed maxWidth.
- The input array
words
contains at least one word.
Example 1:
Input:
words = ["This", "is", "an", "example", "of", "text", "justification."]
maxWidth = 16
Output:
[
"This is an",
"example of text",
"justification. "
]
Example 2:
Input:
words = ["What","must","be","acknowledgment","shall","be"]
maxWidth = 16
Output:
[
"What must be",
"acknowledgment ",
"shall be "
]
Explanation: Note that the last line is "shall be " instead of "shall be",
because the last line must be left-justified instead of fully-justified.
Note that the second line is also left-justified becase it contains only one word.
Example 3:
Input:
words = ["Science","is","what","we","understand","well","enough","to","explain",
"to","a","computer.","Art","is","everything","else","we","do"]
maxWidth = 20
Output:
[
"Science is what we",
"understand well",
"enough to explain to",
"a computer. Art is",
"everything else we",
"do "
]
[暴力解法]:
时间分析:
空间分析:
[优化后]:
时间分析:
空间分析:
[奇葩输出条件]:
[奇葩corner case]:
粘贴的时候遵循【第一个单词】+【空格】+【下一个单词】,先用空格占位置 空格在前面,否则空格在后面,不能做到最后还是单词:
["This is an ","example of ","text ","justification. "]
["This is an","example of text","justification. "]
[思维问题]:
没思路
[英文数据结构或算法,为什么不用别的数据结构或算法]:
[一句话思路]:
每一行中,用w数单词,数空格:初始化空格、更新空格,贴空格:贴正常的空格、剩下的空格贴最后面
[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):
[画图]:
[一刷]:
- 贴单词的时候,w_w结构,别忘了把最后一个单词贴上
[二刷]:
[三刷]:
[四刷]:
[五刷]:
[五分钟肉眼debug的结果]:
[总结]:
写这么长,无非就是每一行数空格、贴空格
[复杂度]:Time complexity: O(n) Space complexity: O(n)
[算法思想:递归/分治/贪心]:
[关键模板化代码]:
[其他解法]:
[Follow Up]:
[LC给出的题目变变变]:
[代码风格] :
[是否头一次写此类driver funcion的代码] :
class Solution {
public List<String> fullJustify(String[] words, int maxWidth) {
//ini
List<String> res = new ArrayList<>(); //cc
if (words == null || words.length == 0) return res;
if (maxWidth == 0) res.add(""); //for each line i, count w, ini space, update space, add normal space: w_w, rmn space
for (int i = 0, w; i < words.length; i = w) { //count word
int len = - 1;
for (w = i; w < words.length && len + words[w].length() + 1 <= maxWidth; w++) {
len += words[w].length() + 1;
} //ini space
int normalSpace = 1;
int extraSpace = 0;
int gaps = w - i - 1; //update spae
if (w != i + 1 && w != words.length) {
normalSpace = (maxWidth - len) / gaps + 1;
extraSpace = (maxWidth - len) % gaps;
} //add normal space: w_w in one line
StringBuilder sb = new StringBuilder(words[i]);
//each word
for (int j = i + 1; j < w; j++) {
for (int k = 0; k < normalSpace; k++) {
sb.append(' ');
}
if (extraSpace > 0) {
sb.append(' ');
extraSpace--;
}
//append the last
sb.append(words[j]);
} //append rmn to the tail
int rmnSpaces = maxWidth - sb.length();
while (rmnSpaces > 0) {
sb.append(' ');
rmnSpaces--;
} res.add(sb.toString());
} return res;
}
}
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 ...
- 68. Text Justification
题目: Given an array of words and a length L, format the text such that each line has exactly L charac ...
- 【一天一道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 (JAVA)
Given an array of words and a width maxWidth, format the text such that each line has exactly maxWid ...
- 68. Text Justification *HARD*
Given an array of words and a length L, format the text such that each line has exactly L characters ...
- Leetcode#68 Text Justification
原题地址 没有复杂的算法,纯粹的模拟题 先试探,计算出一行能放几个单词 然后计算出单词之间有几个空格,注意,如果空格总长度无法整除空格数,前面的空格长度通通+1 最后放单词.放空格,组成一行,加入结果 ...
随机推荐
- bzoj 5120 [2017国家集训队测试]无限之环——网络流
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=5120 旋转的话相当于去掉一个插头.新增一个插头,所以在这两个插头之间连边并带上费用即可. 网 ...
- FPGA的CNN加速,你怎么看?
网上对于FPGACNN加速的研究已经很多了,神经网络的硬件加速似乎已经满大街都是了,这里我们暂且不讨论谁做的好谁做的不好,我们只是根据许许多多的经验来总结一下实现硬件加速,需要哪些知识,考虑哪些因素. ...
- 003:MySQL账号创建授权以及Workbench
目录 一. 权限管理 1."用户 + IP"的概念 2. 用户权限管理 3. 基本操作 4. 撤销权限 5.授权和创建用户 二. MySQL模拟角色 三. Workbench与Ut ...
- PHP字符串中的变量解析
定义字符串的时候,用单引号或者双引号都是可以的.我个人习惯是用双引号.在输出字符串的时候,若字符串中含有字符串变量,使用单引号和双引号则是有区别的.如下面程序: <?php $website = ...
- (转)Tomcat 启动后 “闪退”
缘由 今天在一台新机器上部署开发环境,安装完Tomcat以后,运行startup.bat后出现“闪退”...在网上找到了解决方案,条理清晰且分析的很详尽.记录如下: 首先贴出原文链接: http:// ...
- node的超时timeout
如果在指定的时间内服务器没有做出响应(可能是网络间连接出现问题,也可能是因为服务器故障或网络防火墙阻止了客户端与服务器的连接),则响应超时,同时触发http.ServerResponse对象的time ...
- Intellij解决版本冲突时,merge界面各区块颜色区分
灰色:删除 蓝色:改变 绿色:新增 红色:冲突
- 关于调整TimePicker, DatePicker的大小,样式
最近在做一个时间选择器,想把要DatePicker和TimePicker放在一起使用,无赖他们的大小样式是被Google写死了,找不到相应的属性来设置,自己花了点时间写了一个使用的Demo,运行的效果 ...
- B. T-primes
/* PROBLEMSSUBMITSTATUSSTANDINGSCUSTOM TEST B. T-primes time limit per test2 seconds memory limit pe ...
- PoJ 1595 PrimeCuts
Prime Cuts Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9339 Accepted: 3562 Descri ...