将一个字符串数组写成多行,每行长度相同均为L,同时每行空格尽量均匀除了最后一行之外,最后一行就可以依左,其他行相当于全行铺开。
//想法好想但是实现起来困难,还是想法对程序之间的映射没有建立起来,包括该用什么数据结构,循环判断条件,变量设定。
public List<String> fullJustify(String[] words,int L){
List<String> res = new ArrayList<>();
int i = 0;
while( i < words.length){
int j=i,len=0;
while(j < words.length && len+words[j].length()+j-i<=L)
len += words[j++].length(); //查找该行可以容纳多少个单词,len+words[j].length()是单词长度,j-i是空格长度。
String out = null;
int space = L-len;//实际会插入的空格的个数
for(int k = i ; k < j; k++){ //针对每个单词计算其后面需要插入的空格的个数
out += words[k];//先把单词放入
if(space > 0){//再去判断空格个数,space代表还剩下多少空格
int tmp;
if(j == words.length){//如果j所处的是最后一行则特殊对待
if(j==k+1) tmp=space;//如果k=j-1说明这是最后一个单词则其后面的空格就是剩下多少是多少
else tmp=1;//如果k不是最后一行最后一个单词则都是每个单词后面接1.
}else{//如果j所处的不是最后一行
if(j-k-1 > 0){//如果k指的不是最后一个则平均化空格
if(space%(j-k-1)==0) tmp=space/(j-k-1);
else tmp = space/(j-k-1)+1;
}else tmp = space;//该行剩下的空格数都给最后一个单词后面插入
}
out.append(tmp," ");//实际插入空格
space -= tmp;//空格数要减少
}
}
res.add(out);
i=j;
}
return res;
}