[leetcode] 68. 文本左右对齐(国区第240位AC的~)
国区第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的~)的更多相关文章
- Java实现 LeetCode 68 文本左右对齐
		68. 文本左右对齐 给定一个单词数组和一个长度 maxWidth,重新排版单词,使其成为每行恰好有 maxWidth 个字符,且左右两端对齐的文本. 你应该使用"贪心算法"来放置 ... 
- Leetcode 68.文本左右对齐
		文本左右对齐 给定一个单词数组和一个长度 maxWidth,重新排版单词,使其成为每行恰好有 maxWidth 个字符,且左右两端对齐的文本. 你应该使用"贪心算法"来放置给定的单 ... 
- LeetCode(68):文本左右对齐
		Hard! 题目描述: 给定一个单词数组和一个长度 maxWidth,重新排版单词,使其成为每行恰好有 maxWidth 个字符,且左右两端对齐的文本. 你应该使用“贪心算法”来放置给定的单词:也就是 ... 
- [LeetCode] Text Justification 文本左右对齐
		Given an array of words and a length L, format the text such that each line has exactly L characters ... 
- html文本垂直居中对齐
		html文本垂直居中对齐,代码如下: <div id="box" style="height:100px; line-height:100px; border:1p ... 
- CSS3 justify 文本两端对齐
		浏览器参照基准:Firefox4 and Later, Chrome5 and Later, Safari5 and Later, Opera10.53 and Later, IE5.5 and La ... 
- iOS上让按钮文本左对齐问题
		一,问题分析 1.在做历史记录视图的时候,由于让键盘退出后才能触发表格的 didselect 那个代理方法,也就是得点两下才触发,而表格中的按钮点一下就可以立即响应. 2.于是我就有了用按钮事件代替 ... 
- leetcode@ [68] Text Justification (String Manipulation)
		https://leetcode.com/problems/text-justification/ Given an array of words and a length L, format the ... 
- 【CSS学习】--- 文本水平对齐属性text-align和元素垂直对齐属性vertical-align
		一.文本水平对齐属性---text-align text-align属性是将块级标签以及单元格里面的内容进行相应的对齐,块级标签里的内联元素会被整体进行移动,而子块级元素或子单元格则会继承父元素的te ... 
随机推荐
- 刨死你系列——手撕ArrayList
			不多BB,直接上代码: public class MyArrayList { //创建数组对象 private Object[] elements; //已使用数组长度 private int siz ... 
- Git 简介与仓库使用
			1. Git 简介 2. 远程仓库的使用 3. 本地仓库的使用 1. Git 简介 Git 是分布式版本控制系统,同一个 Git 仓库,可以分布到不同的机器上. 其原理是首先找一台电脑充当服务器的角色 ... 
- 1003 Emergency (25分)
			As an emergency rescue team leader of a city, you are given a special map of your country. The map s ... 
- think php 5.x
			# Exploit Title: thinkphp 5.X RCE # Date: 2019-1-14 # Exploit Author: vr_system # Vendor Homepage: h ... 
- Android内核的编译和调试
			本文博客地址:http://blog.csdn.net/qq1084283172/article/details/70500488 一.Android内核源码的选择 Android手机设备内核源码的调 ... 
- 发现Webpack中泄露的api
			发现Webpack中泄露的api 目录 发现Webpack中泄露的api 1 - 安装 reverse-sourcemap 2 - 寻找xxx.js.map 3 - 下载xxx.js.map并获取所有 ... 
- Day001 电脑常用快捷键
			电脑常用快捷键 Ctrl+C 复制 Ctrl+V 粘贴 Ctrl+A 全选 Ctrl+X 剪切 Ctrl+Z 撤销 Ctrl+S 保存 Alt+F4 关闭窗口(英雄联盟选英雄界面可以查看对面阵容(狗头 ... 
- mongo中常用的命令
			命令使用mongo shell 执行 1.mongo中增加新字段 mongo shell 进入后执行use table选中要添加字段的库 db.getCollection('表名').update({ ... 
- Spring Cloud Alibaba(8)---Feign服务调用
			Feign服务调用 有关Spring Cloud Alibaba之前写过五篇文章,这篇也是在上面项目的基础上进行开发. Spring Cloud Alibaba(1)---入门篇 Spring Clo ... 
- SSM久别遇新坑
			SSM久别遇新坑 久别个锤子,也就几天没看,改bug改到怀疑人生 maven的父子模块问题 众所周知,用maven建立一个空的模块,在它之下,将原本的各层次结构分别新建为一个子模块,就能够将各业务进行 ... 
