1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
| package com.demo.s68;
import java.util.ArrayList; import java.util.List;
public class Solution { public List<String> fullJustify(String[] words, int maxWidth) { final String[] space = new String[maxWidth+1]; StringBuffer s = new StringBuffer(); for(int i = 0;i<maxWidth+1;i++){ space[i] = s.toString(); s.append(" "); } List<String> pWords = new ArrayList<String>(); for(int i=0; i<words.length; i++){ int curlen = words[i].length(); int startI = i; while(i < words.length-1 && curlen<maxWidth){ i++; curlen = curlen+words[i].length()+1; } if(curlen>maxWidth){ curlen = curlen-words[i].length()-1; i--; } pWords.add(processCurline(words,startI,i,curlen,maxWidth,space)); } return pWords; } public String processCurline(String[] words,int si,int ei,int curlen,int maxWidth,String[] space){ StringBuffer sb = new StringBuffer(); int map = ei-si; int addSpace = maxWidth - curlen+map; if(map==0){ sb.append(words[ei]); sb.append(space[addSpace]); return sb.toString(); } if(ei == words.length-1){ for(int i =si;i<ei;i++){ sb.append(words[i]).append(" "); } sb.append(words[ei]); sb.append(space[addSpace-map]); return sb.toString(); } int allAddSpace = addSpace/map; int left = addSpace % map + si; for(int i = si;i<ei;i++){ sb.append(words[i]).append(space[allAddSpace]); if(i < left) sb.append(" "); } sb.append(words[ei]); return sb.toString(); } }
|