68. Text Justification
class Solution { public List<String> fullJustify(String[] words, int maxWidth) { List<String> res=new ArrayList<String>(); int idx=0; while(idx<words.length) { int curlen=0; int i=idx; while(i<words.length&&curlen+words[i].length()<=maxWidth) { curlen+=words[i].length()+1; i++; } curlen--; StringBuilder sb=new StringBuilder(); if(i==words.length||i==idx+1) { for(int k=idx;k<i-1;k++) sb.append(words[k]+" "); sb.append(words[i-1]); for(int k=sb.length();k<maxWidth;k++) sb.append(" "); res.add(sb.toString()); } else { int space=(maxWidth-curlen)/(i-idx-1); int extra=(maxWidth-curlen)%(i-idx-1); String sp=""; for(int k=0;k<space;k++) sp+=" "; for(int k=idx;k<i-1;k++) { sb.append(words[k]+" "+sp); if(extra>0) { sb.append(" "); extra--; } } sb.append(words[i-1]); res.add(sb.toString()); } idx=i; } return res; } }