这个题的接受率好低,搞得我一直不敢做。后来认真的看了一下题目,不是非常难嘛。字符串的题目ac率就是低,除了难,还由于它的測试用例太多。

思路不难,主要是由于特殊情况太多。纯模拟,我把全部的情况罗列一下,细致一点的话就能写好了。

1. 当word为空,也就是""时,应该返回一行跟L数目相等的空格。

这样的情况须要提前推断和处理。

2. 当当前行不是最后一行时,应该尽可能多的放单词,单词不能截断。在这一行上,单词应该分布的尽可能均匀,且要把这一行填满,效果就跟word排版里面的撑满整行非常像。如何实现这个功能呢?我的做法是先确定这一行中能放多少个单词。注意计算的时候。要在单词之间插入一个空格。

然后看看这一行中一共须要插入多少个空格(L-单词的总长度)。用 总的空格数/(单词数-1),就知道每一个单词之间至少插入多少个空格。假设还有剩余(总空格数%(单词数-1)),就从左往右,每次填上一个,用完为止。

另一种情况,假设这一行中仅仅能放一个单词。要把这个单词放在最左边,然后加入空格到L长度。

3. 假设当前行是最后一行,那么要将单词尽可能的往左边排列,单词之间插入一个空格。右側用空格填充到L。

如何知道当前行是不是最后一行呢。我的方法是每次确定单词范围时,看看这个范围的尾部是不是word的结尾。

class Solution {
public:
vector<string> fullJustify(vector<string> &words, int L) {
int msize = words.size();
int i=0, j, part, tpl;
vector<string> res;
if(words[0] == ""){
string s(L, ' ');
res.push_back(s);
return res;
}
string tpline, spspace;
while(i<msize){
part = 1;
tpl = words[i].length();
j = i+1;
while(j<msize&&tpl+words[j].length()+part<=L){
tpl += words[j].length();
++part;
++j;
}
--part;
tpline = words[i];
if(j != msize&&part!=0){
int spaces = L-tpl;
int extraspace = spaces%part;
int spa=spaces/part;
string sspace(spa, ' ');
for(int k=i+1;k<j;k++){
spspace = sspace;
if(extraspace>0){
spspace += " ";
--extraspace;
}
tpline += spspace + words[k];
}
res.push_back(tpline);
}else{
for(int k=i+1;k<j;k++){
tpline += " " + words[k];
}
int l=tpline.length();
for(int k=0;k<L-l;k++)
tpline += " ";
res.push_back(tpline);
}
//cout<<tpline<<endl;
i = j;
}
return res;
}
};

leetcode第一刷_Text Justification的更多相关文章

  1. leetcode第一刷_Set Matrix Zeroes

    这个题乍一看非常easy,实际上还挺有技巧的.我最開始的想法是找一个特殊值标记.遇到一个0,把他所相应的行列中非零的元素标记成这个特殊值.0值保持不变,然后再从头遍历一次,碰到特殊值就转化成0. 问题 ...

  2. leetcode第一刷_Permutations II

    当有反复元素的时候呢? 不用拍脑袋都会想到一种方法,也是全部有反复元素时的通用处理方法,维护一个set,假设这个元素没增加过就增加,增加过了的忽略掉.可是,在这道题上这个通用方法竟然超时了! 怎么办? ...

  3. leetcode第一刷_Populating Next Right Pointers in Each Node II

    很自然的推广,假设去掉全然二叉树的条件呢?由于这个条件不是关键,因此不会影响整体的思路.做法依旧是每次找到一层的起点,然后一层一层的走. 假设是全然二叉树的话,每层的起点就是上一层起点的左孩子,兄弟之 ...

  4. leetcode第一刷_Merge Intervals

    看到这个题我就伤心啊,去微软面试的时候,第一个面试官让我做的题目就是实现集合的交操作,这个集合中的元素就像这里的interval一样.是一段一段的.当时写的那叫一个慘不忍睹.最后果然被拒掉了. .好好 ...

  5. leetcode第一刷_N-Queens

    八皇后问题应该是回溯法的教学典范.在本科的时候,有一门课叫面向对象.最后的附录有这个问题的源码.当时根本不懂编程,照抄下来,执行一下出了结果都非常开心,哎. 皇后们的限制条件是不能同行同列,也不能同对 ...

  6. leetcode第一刷_Gray Code

    说到格雷码,应该没人不知道,详细它有什么用,我还真不是非常清楚,我室友应该是专家.生成的规律不是非常明显,之前看到帖子讲的,这会儿找找不到了.. 思想是这种,假设有n位,在第2^(n-1)个编码以下画 ...

  7. leetcode第一刷_Combination Sum Combination Sum II

    啊啊啊啊.好怀念这样的用递归保存路径然后打印出来的题目啊.好久没遇到了. 分了两种,一种是能够反复使用数组中数字的,一种是每一个数字仅仅能用一次的.事实上没有多大差别,第一种每次进入递归的时候都要从头 ...

  8. leetcode第一刷_Count and Say

    水题. 描写叙述的还挺麻烦的,实际上就是纸老虎,用两个string,一个存上一轮的结果,一个用来更新出这一轮的结果,每次扫描上一轮,统计一个字符出现的次数,然后把这个次数和字符增加到这一轮的字符串中就 ...

  9. leetcode第一刷_Jump Game

    这个题事实上非常easy的,我一開始想复杂了,它没要求记录路径,事实上仅仅要看一下每一步之后所能延伸到的最远的位置就能够了,在这一个最远位置前面的那些位置,都是能够到达的,假设扫到了某个i,它大于当前 ...

随机推荐

  1. 版本号比较[versionCompare]

    /*** * 版本号比较 * @param v1 版本号a * @param v2 版本号b * @return -1代表不是合格版本号:0代表一样大.1 代表版本号a大于版本号b.2代表版本号b大于 ...

  2. 滴滴云安装mysql数据库

    Linux CentOS安装配置MySQL数据库   没什么好说的,直接正面刚吧. 安装mysql数据库 a)下载mysql源安装包:wget http://dev.mysql.com/get/mys ...

  3. /etc/rsyncd.conf

    [root@backup ~]# cat /etc/rsyncd.conf #Rsync server#created by oldboy ##rsyncd.conf start##uid = rsy ...

  4. 紫书 习题 8-2 UVa 1610 (暴力出奇迹)

    这道题我真的想的非常的复杂, 拿草稿纸一直在找规律,推公式, 然后总有一些特殊的情况. 然后就WA了N次.无奈之下看了别人的博客, 然后就惊了.直接暴力枚举两个相邻字符串 里面的所有可能就可以了--真 ...

  5. ASP.NET-ajax.acionlink使用

    Ajax 属性的ActionLink方法可以创建一个具有异步行为的锚标签. ActionLink方法的第一个参数指定了链接文本,第二个参数是要异步调用的操作的名称.类似于同名的HTML辅助方法,AJA ...

  6. hadoop-10-创建yum资源库

    hadoop-10-创建yum资源库 1,在/etc/yum.repos.d/下面创建 ambari.repo  HDP.repo  HDP-UTILS.repo 三个文件: [root@server ...

  7. [Mobx] Using mobx to isolate a React component state

    React is great for diffing between Virtual-DOM and rendering it to the dom. It also offers a naïve s ...

  8. ScrollView反弹效果的实现

    发现非常多APP的界面都能够滑动,QQ.微信等等,自己琢磨了下.效果例如以下: 代码:ScrollView package com.wsj.wsjdemo; import android.conten ...

  9. Linux经常使用命令(九) - cat

    cat命令的用途是连接文件或标准输入并打印.这个命令经常使用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用. 1. 命令格式: cat [选项] 文 ...

  10. Find or Query Data with the mongo Shell

    https://docs.mongodb.com/getting-started/shell/query/ Overview You can use the find() method to issu ...