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

words: ["This", "is", "an", "example", "of", "text", "justification."]
L: 16.

Return the formatted lines as:

[
"This is an",
"example of text",
"justification. "
]
public class TextJustification {
public ArrayList<String> fullJustify(String[] words, int L)
{
ArrayList<String> res = new ArrayList<String>();
if(words==null || words.length==0)
return res;
int count = 0;//当前行字符串长度和
int last = 0;//每一行头元素下标
for(int i=0;i<words.length;i++)
{
//count是上一次计算的单词的长度,words[i].length()是当前尝试放的一个单词的长度,
//假设当前放上了这个单词,那么这一行单词跟单词间的间隔数就是i-last
//判断这些总的长度加起来是不是大于L(超行数了)
if(count + words[i].length() + (i-last) > L)
{
int spaceNum = 0;
int extraNum = 0;
//因为尝试的words[i]失败了,所以间隔数减1.此时判断剩余的间隔数是否大于0
if( i-last-1 >0)
{
//是间隔的倍数(为啥要减1,因为尝试当前words[i]后发现比L长了,
//所以当前这个单词不能算作这行,所以间隔就减少一个
spaceNum = (L-count)/(i-last-1);
extraNum = (L-count)%(i-last-1);//不是倍数的话还要计算
}
StringBuilder str = new StringBuilder();
for(int j=last;j<i;j++)
{
str.append(words[j]);
if(j<i-1)
{//words[i-1]的话后面就不用填空格了,所以这里j<i-1
for(int k=0;k<spaceNum;k++)
str.append(" "); if(extraNum>0)
{
str.append(" ");
extraNum--;
}
}
} //下面这个for循环作用于一行只有一个单词还没填满一行的情况
for(int j=str.length();j<L;j++)
str.append(" "); res.add(str.toString());
count=0;
last=i;//下一个开始的单词
}//if
count += words[i].length();
}//for //处理最后一行
StringBuilder str = new StringBuilder();
for(int i=last;i<words.length;i++)
{
str.append(words[i]);
if(str.length()<L)
str.append(" ");
}
for(int i=str.length();i<L;i++)
str.append(" "); res.add(str.toString());
return res;
}
public static void main(String[] args) {
String[] words = {"This", "is", "an", "example", "of", "text", "justification."};
int l = 16;
TextJustification tj = new TextJustification();
ArrayList<String> list = tj.fullJustify(words, l);
for (String string : list) {
System.out.println(string);
}
}
}

Text Justification,文本对齐的更多相关文章

  1. [Leetcode] text justification 文本对齐

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

  2. [LeetCode] 68. Text Justification 文本对齐

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

  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 文本左右对齐

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

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

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

  6. [Swift]LeetCode68. 文本左右对齐 | Text Justification

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

  7. [MIT6.006] 20. Daynamic Programming II: Text Justification, Blackjack 动态规划II:文本对齐,黑杰克

    这节课通过讲解动态规划在文本对齐(Text Justification)和黑杰克(Blackjack)上的求解过程,来帮助我们理解动态规划的通用求解的五个步骤: 动态规划求解的五个"简单&q ...

  8. 68. Text Justification一行单词 两端对齐

    [抄题]: Given an array of words and a width maxWidth, format the text such that each line has exactly  ...

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

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

随机推荐

  1. iOS 去掉navgationbar 底部线条

    [[UINavigationBar appearance] setBarStyle:UIBarStyleBlackTranslucent]; [[UINavigationBar appearance] ...

  2. python3 简单爬虫

    爬取虎牙直播分类页面的主播的头像,名字,人气 今天学习了python3爬虫,上课闲着无聊,自己写了一个爬虫 就顺着老师思路 爬了虎牙直播分类页面的主播,头像,名字,和人气 HuYaCateScrapy ...

  3. css 中的事件冒泡

    css伪类中的表现类似于事件冒泡的,举个例子,当你滑过一个元素时,他会认为你也滑过了该元素的父元素,即使该元素看起来并没有包含在父元素里面,此处以:hover例子: 效果图: 滑过前: 滑过后: CS ...

  4. Windows窗口的层次关系(转)

    今天看到这篇文章,觉得蛮有用的,我之前也对这个不大了解,特转载此处. 转载地址:http://www.51testing.com/html/200804/n80848.html 在Window 的图形 ...

  5. 巨蟒python全栈开发-第17天 核能来袭-成员

    一.今日主要内容 1.成员 在类中你能写的所有内容都是类的成员 2.变量 (1)实例变量:昨天写的就是实例变量,由对象去访问的变量. (2)类变量(静态变量):此时,这个变量属于类,但是对象也可以访问 ...

  6. xshell 没有反应---Xshell按ctrl+s界面无反应的解决办法

    在用Xshell管理远程服务器,特别是在用vi编辑配置文件时,总是习惯的用ctrl+s想要保存文件,然后就悲剧了.xsell就再也没有返应只能关了重新打开.但原来修改的文件算是报废了. 在网上搜索了一 ...

  7. Python知识点复习之__call__

    一个对象实例可以有自己的属性和方法,当我们调用实例方法时,我们用instance.method()来调用.能不能直接在实例本身上调用呢?在Python中,答案是肯定的. 任何类,只需要定义一个__ca ...

  8. TouchDelegate

    TouchDelegate(Rect bounds, View delegateView) Parameters: bounds Bounds in local coordinates of the ...

  9. python DES3 加密解密

    背景:想给公司的进件流程写一套进件脚本,首先遇到的就是加密解密.公司用的 DES3 + base64 加密解密 一.安装  pycrypto模块,推荐用pycrypto编译文件,直接下载安装就行 ht ...

  10. pandas(三)汇总和计算描述统计

    pandas对象有一些常用的数学和统计的方法,大部分都属于约简或汇总统计. SUM方法 DataFrame对象的sum方法,返回一个含有列小计的Series >>> df = Dat ...