Text Justification
2015-09-28 03:23
387 查看
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
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:
L:
Return the formatted lines as:
Note: Each word is guaranteed not to exceed L in length.
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.
public class Solution { public List<String> fullJustify(String[] words, int maxWidth) { List<String> list = new LinkedList<String>(); for (int i = 0, w; i < words.length; i = w) { int len = -1; for (w = i; w < words.length && len + words[w].length() + 1 <= maxWidth; w++) { len += words[w].length() + 1; } StringBuilder strBuilder = new StringBuilder(words[i]); int space = 1, extra = 0; if (w != i + 1 && w != words.length) { // not 1 char, not last line space = (maxWidth - len) / (w - i - 1) + 1; extra = (maxWidth - len) % (w - i - 1); } for (int j = i + 1; j < w; j++) { for (int s = space; s > 0; s--) strBuilder.append(' '); if (extra-- > 0) strBuilder.append(' '); strBuilder.append(words[j]); } int strLen = maxWidth - strBuilder.length(); while (strLen-- > 0) strBuilder.append(' '); list.add(strBuilder.toString()); } return list; } }
相关文章推荐
- 在线图片处理工具集合
- *LeetCode-Kth Largest Element in an Array
- 蓝的成长记——追逐DBA(20):何故缘起,建库护航
- Word Ladder II(BFS + DFS)
- C#RichTextBox更改字体(Font)[大小,粗/斜/下划/删除,变色]
- SQL语句熟悉
- CSS3 attribute
- tar 解压缩命令详解
- C/C++:对象初始化相关
- LeetCode-Insertion Sort List
- Training ------ Building Your First App ------ Building Your First App
- 用Android Studio提交项目到github的几个问题
- json动态创建对象并添加属性,遍历属性
- Xcode7 导出企业级(大企业)安装包ipa
- OpenStack Kilo VirtualBox CentOS7 部署问题汇总及解决办法
- GLib 创建自定义事件源
- JAVA两窗体之间的传值
- 练习:关于数字大小排序,求两数的最小公倍数,字母大小写转化;
- ASP.NET学习笔记(001):HTML
- 10亿随机数取最小的10个