68. 文本左右对齐

国区第240位AC的~我还以为坑很多呢,一次过,嘿嘿,开心

其实很简单,注意题意:使用“贪心算法”来放置给定的单词;也就是说,尽可能多地往每行中放置单词。

也就是说,一行里放置多少word,是一次确定的,后面的行word怎么分配,跟前面的行没有关系。

注意有个隐藏条件:两个单词间至少有一个空格

那么我们就可以把问题分解了:

第一步:找出一行需要放置哪些word(“贪心算法”来放置给定的单词,尽可能多地往每行中放置单词。)

第二步:word怎么放,也就是空格如何分配(平均分配就好了,具体看代码把,写的很清楚)

此题的示例给的很良心,把需要注意的地方都给出来了,你能过示例基本这题就过了

class Solution {
public List<String> fullJustify(String[] words, int maxWidth) {
int index = 0;
List<String> ans = new ArrayList<>();
while (true) {
int curWordCnt = 0;
int curAllWordLength = 0;
List<String> tmp = new ArrayList<>();
// 第一步,先挑出哪些word需要填充
while (index < words.length && curAllWordLength + curWordCnt + words[index].length() <= maxWidth) {
tmp.add(words[index]);
curWordCnt++;
curAllWordLength += words[index].length();
index++;
}
StringBuilder s = new StringBuilder();
s.append(tmp.get(0));
if (index == words.length) {
// 如果是最后一行,特殊处理
for (int i = 1; i < tmp.size(); i++) {
s.append(" ").append(tmp.get(i));
}
while (s.length() < maxWidth) {
s.append(" ");
}
ans.add(s.toString());
break;
}
// 第二步,word怎么排?主要是空格的分配
int spaceLength = maxWidth - curAllWordLength;
int averSpaceLength = 0;
if (curWordCnt > 1) {
averSpaceLength = spaceLength / (curWordCnt - 1);
}
int overflowSpaceLength = spaceLength - averSpaceLength * (curWordCnt - 1);
for (int i = 1; i < tmp.size(); i++) {
for (int j = 0; j < averSpaceLength; j++) {
s.append(" ");
}
if (overflowSpaceLength > 0) {
overflowSpaceLength--;
s.append(" ");
}
s.append(tmp.get(i));
}
// 如果只有一个单词,特殊处理,后面全部填充空格
if (tmp.size() == 1) {
while (s.length() < maxWidth) {
s.append(" ");
}
}
ans.add(s.toString()); } return ans;
}
}

[leetcode] 68. 文本左右对齐(国区第240位AC的~)的更多相关文章

  1. Java实现 LeetCode 68 文本左右对齐

    68. 文本左右对齐 给定一个单词数组和一个长度 maxWidth,重新排版单词,使其成为每行恰好有 maxWidth 个字符,且左右两端对齐的文本. 你应该使用"贪心算法"来放置 ...

  2. Leetcode 68.文本左右对齐

    文本左右对齐 给定一个单词数组和一个长度 maxWidth,重新排版单词,使其成为每行恰好有 maxWidth 个字符,且左右两端对齐的文本. 你应该使用"贪心算法"来放置给定的单 ...

  3. LeetCode(68):文本左右对齐

    Hard! 题目描述: 给定一个单词数组和一个长度 maxWidth,重新排版单词,使其成为每行恰好有 maxWidth 个字符,且左右两端对齐的文本. 你应该使用“贪心算法”来放置给定的单词:也就是 ...

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

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

  5. html文本垂直居中对齐

    html文本垂直居中对齐,代码如下: <div id="box" style="height:100px; line-height:100px; border:1p ...

  6. CSS3 justify 文本两端对齐

    浏览器参照基准:Firefox4 and Later, Chrome5 and Later, Safari5 and Later, Opera10.53 and Later, IE5.5 and La ...

  7. iOS上让按钮文本左对齐问题

    一,问题分析 1.在做历史记录视图的时候,由于让键盘退出后才能触发表格的 didselect 那个代理方法,也就是得点两下才触发,而表格中的按钮点一下就可以立即响应. 2.于是我就有了用按钮事件代替 ...

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

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

  9. 【CSS学习】--- 文本水平对齐属性text-align和元素垂直对齐属性vertical-align

    一.文本水平对齐属性---text-align text-align属性是将块级标签以及单元格里面的内容进行相应的对齐,块级标签里的内联元素会被整体进行移动,而子块级元素或子单元格则会继承父元素的te ...

随机推荐

  1. .Net下引用多目标框架项目导致XAML无法识别类型的问题

    背景 我的项目(以下称为LibA)中有一个多目标框架编译的项目,即项目文件包含如下代码: <PropertyGroup> ... <TargetFrameworks>netco ...

  2. c协程库libco几点体会

    https://www.cnblogs.com/dearplain/p/9820913.html 这里说的是Tencent开源的libco. libco的用途和依赖 主要还是c/c++服务端,相比li ...

  3. jq 获取表单全部数据

    jQuery Ajax 操作函数: serialize(): 将表单内容序列化为字符串 serializeArray():序列化表单元素,返回JASON数据 语法: $(selector).seria ...

  4. 从苏宁电器到卡巴斯基第11篇:我在苏宁电器当营业员 III

    积分换礼的是是非非 在苏宁购物是需要会员卡的(免费办理),我们需要利用这个会员卡来开单,顾客的消费可以换算成积分,贮存在会员卡里面.这个积分可以用于积分换礼,比如电磁炉.乐扣保鲜盒或者其它一些家用器具 ...

  5. hdu4845 状态压缩BFS

    题意:      给一个n*m的矩阵,从11,走到nm,格子和格子之间可能有墙,也可能有门,有的格子上面有钥匙,相应的钥匙开相应的们,捡钥匙和开门都不需要时间,问你最少多少部能走到nm. 思路:   ...

  6. POJ1135比较有意思的对短路(多米骨牌)

    题意:      有一个骨牌游戏,就是推到一个后所有的牌都会被退到的那种游戏,起点是1,有两种骨牌,一种是关键牌,另一种是普通牌,普通牌是连接关键牌用的,给你一些边a b c的意思是关键牌a倒之后c时 ...

  7. C#-CHTTPDownload

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  8. Windows Pe 第三章 PE头文件(下)

    3.5  数据结构字段详解 3.5.1  PE头IMAGE_NT_HEADER的字段 1.IMAGE_NT_HEADER.Signature +0000h,双字.PE文件标识,被定义为00004550 ...

  9. ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule

    解释:执行docker-compose up -d时出现ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule 原因:防火墙 ...

  10. sharding JDBC 不支持批量导入解决方法

    package com.ydmes.service.impl.log; import com.ydmes.domain.entity.log.BarTraceBackLog;import org.sp ...