zoukankan      html  css  js  c++  java
  • Java for LeetCode 068 Text Justification

    Given an array of words and a length L, format the text such that each line has exactly L characters and is fully (left and right) justified.

    You should pack your words in a greedy approach; that is, pack as many words as you can in each line. Pad extra spaces ' ' when necessary so that each line has exactly L characters.

    Extra spaces between words should be distributed as evenly as possible. If the number of spaces on a line do not divide evenly between words, the empty slots on the left will be assigned more spaces than the slots on the right.

    For the last line of text, it should be left justified and no extra space is inserted between words.

    For example,
    words: ["This", "is", "an", "example", "of", "text", "justification."]
    L: 16.

    解题思路:

    直接按照约束条件老实实现即可,JAVA实现如下:

         static public List<String> fullJustify(String[] words, int maxWidth) {
            List<String> list=new ArrayList<String>();
            int start=0,end=-1,sum=0;
            for(int i=0;i<words.length;i++){
            	sum+=words[i].length();
            	if(sum>maxWidth){
            		i--;
            		start=end+1;
            		end=i;
            		sum=0;
            		list.add(oneString(words,start,end,maxWidth));
            		continue;
            	}
            	sum++;
            }
            if(sum>0)
            	list.add(oneString(words,end+1,words.length-1,maxWidth));
            return list;   
        }
        static public String oneString(String[] words,int start,int end,int maxWidth){
        	StringBuilder sb=new StringBuilder();
        	if(start==end)
        		sb.append(words[start]);
        	else if(end==words.length-1){
        		for(int i=start;i<=end-1;i++)
        			sb.append(words[i]+" ");
        		sb.append(words[end]);
        	}
        	else{
        	    int spaceSum=maxWidth;
        	    for(int i=start;i<=end;i++)
        		    spaceSum-=words[i].length();
        		int extra=spaceSum-(spaceSum/(end-start))*(end-start);
        		for(int i=start;i<=end;i++){
        			sb.append(words[i]);
        			for(int j=0;j<spaceSum/(end-start)&&i!=end;j++)
        				sb.append(" ");
        			if(extra-->0)
        				sb.append(" ");
        		}
        	}
        	while(sb.length()<maxWidth)
        		sb.append(" ");
        	return sb.toString();
        }
    
  • 相关阅读:
    iOS新手在引入第三方出现的几个小问题
    XMPP安装中遇到需要卸载openfire的步骤
    KVC
    SQLite错误码
    简单对象的本地化(以图片为例)
    使用MD5完成自定义Person对象的加密过程
    IOS--工作总结--post上传文件(以流的方式上传)
    IOS开发系列 --- 核心动画
    监听键盘 防止输入时覆盖掉textfiled
    比较选择的开始时间和结束时间的大小
  • 原文地址:https://www.cnblogs.com/tonyluis/p/4508338.html
Copyright © 2011-2022 走看看