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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • stm32 独立看门狗时钟配置[通俗易懂]

    stm32 独立看门狗时钟配置[通俗易懂]独立看门狗的时钟源为40k,分频因子最大为256//初始化独立看门狗 5秒钟//prer:分频数:0~7(只有低3位有效!)//分频因子=4*2^prer.但最大值只能是256!//rlr:重装载寄存器值:低12位有效,最大只能是4096//时间计算(大概):Tout=40K/((4*2^prer)*rlr)值.voidIWDG_Init(u8prer,u16rlr){ IWDG_Writ…

    2022年5月10日
    60
  • Landsat TM 波段组合[通俗易懂]

    Landsat TM 波段组合[通俗易懂]附录2:LandsatTM波段组合(NASA网页99-10-18)3,2,1这种RGB组合模拟出一副自然色的图象。有时用于海岸线的研究和烟柱的探测。4,5,3用于土壤湿度和植被状况的分析。也很好的用于内陆水体和陆地/水体边界的确定。4,3,2红外假色。在植被、农作物、土地利用和湿地分析的遥感方面,这是最常用的波段组合。7,4,2土壤和植被湿度内容分析;内陆水

    2022年7月23日
    15
  • python读取txt文件封装方法版「建议收藏」

    #-*-coding:utf-8-*-importnumpyasnpdefreadData(file,cols):file=open(file)lines=file.readlines()rows=len(lines)datamat=np.zeros((rows,cols))row=0forlineinlin…

    2022年4月13日
    45
  • java视频教程不同阶段看哪些[通俗易懂]

    java视频教程不同阶段看哪些[通俗易懂]第一个阶段(基础阶段)1、你要掌握HTML语言,认为常用的HTML一些标签。我推荐大家学习孙鑫老师视频的《HTML语言速成》2、掌握JAVA基础,也就是J2SE,我推荐大家学习马士兵老师的J2SE视频。当时我学习J2SE主要学习的张孝祥和孙鑫老师的视频(当时还不知道马士兵老师呢!呵呵)不过我认为孙鑫老师前面几讲还是值得初学者看的,…

    2022年5月16日
    34
  • Markdown (CSDN) MD编辑器(二)- 文本样式(更改字体、字体大小、字体颜色、加粗、斜体、高亮、删除线)[通俗易懂]

    Markdown (CSDN) MD编辑器(二)- 文本样式(更改字体、字体大小、字体颜色、加粗、斜体、高亮、删除线)[通俗易懂]介绍使用markdown编辑器时,利用html的font、mark、strong、em、del、big、small等标签改变文本的颜色、字体、字体大小、加粗字体、斜体、高亮等

    2022年9月23日
    2
  • 贝塔分布和三角分布_狄利克雷函数是什么

    贝塔分布和三角分布_狄利克雷函数是什么文章目录0.补充知识0.1贝塔函数B(P,Q)\Beta(P,Q)B(P,Q)0.2伽马函数Γ(x)\Gamma(x)Γ(x)1.贝塔分布(BetaDistribution)1.1概率密度函数PDF1.2累积分布函数CDF1.3数字特征2.狄利克雷分布(DirichletDistribution)2.1概率密度函数PDF2.2数字特征0.补充知识0.1贝塔函数B(P,Q)\Beta(P,Q)B(P,Q)贝塔函数也称为欧拉第一积分,定义为:B(P,Q)=∫01

    2025年6月28日
    2

发表回复

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

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