【leetcode】第68题 Text Justification 解析及java代码

这题164赞538踩。。好惨

就是输入一个字符串数组,数组里每一项是一个单词。再输入一个maxWidth,这个长度是输出每一行的字符串长度。

要求是每个单词和每个单词之间最少一个空格,如果一行最后剩余的位置不能再放一个单词,就把这一行后面的空格平均分到前面几个单词中间。
如果这一行只有一个单词或者这是最后一行,那么就不用管后面的空格了(但是还是要补充空格到maxWidth)。

我的思路比较简单,输出是一个字符串的集合res。定义一个StringBuilder作为每一行的字符串line,遍历输入的数组,判断如果line为空,直接添加进line中;如果不为空但是line加上下一个单词的长度再加一小于maxWidth,就添加一个空格和下一个单词;如果添加下一个单词会超过maxWidth,那就先处理line,将后面的空格分配到前面几个单词之间去。当然,如果这一行只有一个单词,就之间把line补充空格到maxWidth的长度。然后把line添加到集合res中。最后再把最后一行补充空格到maxWidth的长度,添加到res中即可。

代码如下。

class Solution {
    public List fullJustify(String[] words, int maxWidth) {
        List res = new LinkedList();
        StringBuilder line = new StringBuilder();
        int blanknum = 0;
        int wordnum = 0;
        int remainer = 0;
        int index = 0;
        for(String i : words){
            if(line.length()==0){
                line.append(i);
            }else if(line.length()+1+i.length()<=maxWidth){
                line.append(" ");
                line.append(i);
            }else{
                if(wordnum==1){
                    while(line.length()" ");
                    }
                }else{                
                    blanknum = (maxWidth - line.length())/(wordnum-1);
                    remainer = (maxWidth - line.length())%(wordnum-1);
                    line.delete(0, line.length()); 
                    for(int k=index-wordnum;k<index;k++){
                        line.append(words[k]);
                        if(line.length()for(int j=0;j<(k-index+wordnum2:blanknum+1);j++){
                                line.append(" ");
                            }
                        }
                    }
                }
                res.add(line.toString());
                line.delete(0,line.length()); 
                line.append(i);
                wordnum=0;
            }
            index++;
            wordnum++;
        }
        while(line.length()" ");
        }
        res.add(line.toString());
        return res;
    }
}

你可能感兴趣的:(leetcode)