Text Justification — LeetCode

Text Justification — LeetCode

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

原标题链接: 
http://oj.leetcode.com/problems/text-justification/
 


这道题属于纯粹的字符串操作。要把一串单词安排成多行限定长度的字符串。主要难点在于空格的安排,首先每一个单词之间必须有空格隔开。而当当前行放不下很多其它的单词而且字符又不能填满长度L时。我们要把空格均匀的填充在单词之间。假设剩余的空格量刚好是间隔倍数那么就均匀分配就可以。否则还必须把多的一个空格放到前面的间隔里面。实现中我们维护一个count计数记录当前长度。超过之后我们计算共同的空格量以及多出一个的空格量,然后将当行字符串构造出来。最后一个细节就是最后一行不须要均匀分配空格。句尾留空就能够。所以要单独处理一下。时间上我们须要扫描单词一遍,然后在找到行尾的时候在扫描一遍当前行的单词,只是整体每一个单词不会被訪问超过两遍,所以整体时间复杂度是O(n)。而空间复杂度则是结果的大小(跟单词数量和长度有关,不能准确定义,假设知道最后行数r。则是O(r*L))。代码例如以下: 

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++)
    {
        if(count+words[i].length()+(i-last)>L)
        {
            int spaceNum = 0;
            int extraNum = 0;
            if(i-last-1>0)
            {
                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)
                {
                    for(int k=0;k<spaceNum;k++)
                    {
                        str.append(" ");
                    }
                    if(extraNum>0)
                    {
                        str.append(" ");
                    }
                    extraNum--;
                }
            }
            for(int j=str.length();j<L;j++)
            {
                str.append(" ");
            }       
            res.add(str.toString());
            count=0;
            last=i;
        }
        count += words[i].length();
    }
    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;
}

这道题属于那种文本编辑的子操作之类的题目,从算法思路上没有什么特别。不过还是相当多的实现细节,别easy在第一时间,你可能想练习几次哈。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117327.html原文链接:https://javaforall.net

(0)
上一篇 2022年1月7日 下午4:00
下一篇 2022年1月7日 下午4:00


相关推荐

  • pycharm安装包说pip版本不对_django库

    pycharm安装包说pip版本不对_django库一、pycharm安装库与pip安装库的区别项目使用哪个解释器,就用哪个解释器下的库:python安装目录解释器就用该目录下的库,项目的解释器就用项目里面的库!而pip安装的库是保存在python安装目录解释器下的。“pip成功,pycharm识别不了”,这就是因为新建项目默认解释器是用“项目的解释器”的,但是pip安装的第三方库是在python安装目录下,所以会识别不了。这里我只把我需要知道的摘下来,具体友情链接:关于pip安装第三方库,但PyCharm中却无法识别的问题;以及PyCharm安装第三

    2022年8月26日
    7
  • Oracle查询、创建、删除DBLink

    Oracle查询、创建、删除DBLink查询 DBLINK 信息 select fromdba db links selectowner object namefromdba objectswhere type DATABASELINK select fromALL DB LINKS Oracle 创建 dblink 报错 ORA 01017 ORA 02063 解决 根据 ORA 01017 的提示是连接到另一方

    2026年3月17日
    2
  • 内存管理(一)_内存管理技术有哪些

    内存管理(一)_内存管理技术有哪些内存管理(一)

    2022年4月21日
    31
  • 详解linux中rsync的妙用[通俗易懂]

    详解linux中rsync的妙用[通俗易懂]????1.rsync备份服务器软件介绍:Rsync是一款开源的、快速的、多功能的、可实现全量及增长的本地或远程数据同步备份的优秀工具。增量备份:只同步变化的数据细腻些,主要利用了quickcheck算法实现同步原理:1)建立好网络连接2)先进行数据信息对比3)只将变化的数据进行增量备份2.rsync软件作用说明:(1v4cp/scp/rm/ls)本地数据备份:cp[root@backup~]#cp-a/etc/hosts/tmp/hosts_cp[root@backu

    2022年10月13日
    8
  • 硬编码和软编码

    硬编码和软编码计算机科学中 只有硬编码 hardcode 以及非硬编码 有人也成为 软编码 硬编码和软编码的区别是 软编码可以在运行时确定 修改 而硬编码是不能够改变的 java 小例子 inta 2 b 2 硬编码 if a 2 returnfalse 非硬编码 if a b returntrue 就是把数值写成常量而不是变量 一个简单的版本

    2026年3月26日
    2
  • pycharm-2021.3.3激活码破解方法

    pycharm-2021.3.3激活码破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    1.3K

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号