首页 > 代码库 > Text Justification

Text Justification

  在一段时间没刷题之后,我发现脑子严重地滞涩了。这题AC花了好大力气,出现了Memory Limit Exceed,Core Dump,以及各种普通的编译、运行错误。MLE 和 CD错误是比较难检查的, 只能通过打印来定位,最后发现原来是循环变量未赋值,导致死循环!!!这种错误简直是不能原谅的。二至于其他的各种问题,则是由于脑子里面没有清晰的算法思路,以致一些case不能通过。这种问题,需要经过大量的训练,以及集中精力地编写代码,才能逐渐减少甚至避免。

  当然,另一方面,总体思路上,比第一次AC清晰了许多。每一行的形成需要在下一行开头单词出现以后进行判断以及添加,这样避免了在当前行进行判断需要考虑多种情况的问题。代码如下:

public class Solution {    public ArrayList<String> fullJustify(String[] words, int L)    {        ArrayList<String> res=new ArrayList<String>();        ArrayList<String> line=new ArrayList<String>();        int len=0;        for(int i=0;i<words.length;i++)        {            String cw=words[i];            if(line.size()+len+cw.length()>L)            {                String s="";                String interval="";                int sc=0,sr=0;                if(line.size()==1)                {                    sc=L-len;                    sr=0;                    s=line.get(0);                    for(int j=0;j<sc;j++)                        interval+=" ";                    s+=interval;                    res.add(s);                }                else                {                    sc=(L-len)/(line.size()-1);                    sr=(L-len)%(line.size()-1);                    s=s+line.get(0);                    for(int j=0;j<sc;j++)                        interval+=" ";                    int ct=sr;                    for(int j=1;j<line.size();j++)                    {                        String ts=interval;                        if(ct>0)                        {                            ts=interval+" ";                            ct--;                        }                        s=s+ts;                        s=s+line.get(j);                    }                    res.add(s);                                    }                len=cw.length();                line=new ArrayList<String>();                line.add(cw);                if(i==words.length-1)                {                    s=cw;                    sc=L-cw.length();                    for(int j=0;j<sc;j++)                        s=s+" ";                    res.add(s);                }            }            else            {                line.add(cw);                len+=cw.length();                int l=0;                if(i==words.length-1)                {                    String s=line.get(0);                    l=s.length();                    for(int j=1;j<line.size();j++)                    {                        s=s+" ";                        s=s+line.get(j);                        l=l+1+line.get(j).length();                    }                    int rem=L-l;                    for(int j=0;j<rem;j++)                    {                        s=s+" ";                    }                    res.add(s);                }            }        }        return res;    }}

 

Text Justification