码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode Text Justification

时间:2015-11-07 12:14:16      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:

原题链接在这里:https://leetcode.com/problems/text-justification/

用count + (i-last) + words[i].length() 来表示当前行的总长度,若是比maxWidth大了,就要减去最后一个词。这里面i-last表示空格的数量。

减去一个词后要对其,所以要算每两个次之间最少有 sapceNum个空格,若是还有剩余就是extraSpace. 但注意若是 i-last-1 == 0表示本行只有一个词,需要靠左。

简历StringBuilder sbPerLine, 开始从last 到i加词,加空格。但注意一行最后一个词后面不需要加空格,所以j<i-1时才加空格。

若本行只有一个词,需要在后面补全空格。res加上这一行后更新count 为0, last为i.

最后处理最后一行,若是count + (i-last) + words[i].length()恰好等于maxWidth也是在这里处理。

Time Complexity O(n), n是words数组的大小,每个词不会被扫两遍。Space O(lineNum*maxWidth). lineNum是最后的结果行数。

AC Java:

public class Solution {
    public List<String> fullJustify(String[] words, int maxWidth) {
        List<String> res = new ArrayList<String>();
        if(words == null || words.length == 0){
            return res;
        }
        int len = words.length;
        int count = 0;
        int last = 0;
        for(int i = 0; i<len; i++){
            if(count + (i-last) + words[i].length() > maxWidth){
                int spaceNum = 0;
                int extraSpace = 0;
                if(i-last-1>0){ //如果本行不止一个词,spaceNum和extraSpace才会update
                    spaceNum = (maxWidth-count)/(i-last-1);
                    extraSpace = (maxWidth-count)%(i-last-1);
                }
                
                StringBuilder sbPerLine = new StringBuilder();
                for(int j = last; j<i; j++){
                    sbPerLine.append(words[j]);
                    if(j<i-1){ //每一行最后一个词后面不用加空格,若是本行只有一个词,下面处理
                        for(int k = 0; k<spaceNum; k++){
                            sbPerLine.append(" ");
                        }
                        if(extraSpace > 0){
                            sbPerLine.append(" ");
                            extraSpace--;
                        }
                        
                    }
                }
                
                //如果本行只有一个词
                for(int j = sbPerLine.length(); j<maxWidth; j++){
                    sbPerLine.append(" ");
                }
                
                res.add(sbPerLine.toString());
                count = 0;
                last = i;
            }
            count += words[i].length();
        }
        //处理最后一行,若是只有一行且长度正好等于maxWidth也在下面处理
        StringBuilder lastLine = new StringBuilder();
        for(int i = last; i<len; i++){
            lastLine.append(words[i]);
            if(lastLine.length()<maxWidth){
                lastLine.append(" ");
            }
        }
        for(int i = lastLine.length(); i<maxWidth; i++){
            lastLine.append(" ");
        }
        res.add(lastLine.toString());
        
        return res;
    }
}

参考了这篇帖子:http://www.cnblogs.com/springfor/p/3896168.html

LeetCode Text Justification

标签:

原文地址:http://www.cnblogs.com/Dylan-Java-NYC/p/4944712.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!