68.左右のテキストの配置
各行が正確にmaxWidthに文字、および左右揃えテキストを持って作り、アレイとワード長のmaxWidth、再フォーマットの言葉を考えます。
各行内の単語を配置することが可能な限り、と言うことです。あなたは、与えられた単語を配置するために、「貪欲法」を使用する必要があります。利用可能なスペース、必要な場合は、「各行が正確のmaxWidth文字を有するように、充填されました。
これは、可能な限り、単語間のスペースの数の均一な分布を必要とします。単語間スペースが均等に一列に分配することができない場合、スペースの数は、スペースの数よりも左から右へ配置しました。
テキストの最後の行は左揃え、と単語の間に余分なスペースを挿入しないべきです。
説明:
単語は非空白文字の文字列を指します。
各語の長さが0よりも大きい、またはそれ未満のmaxWidthに等しいです。
少なくとも一つの単語を含む単語の単語列を入力します。
例:
输入:
言葉= [「この」、「テキスト」、「正当化」「の」、「」、「例」「である」]
のmaxWidth = 16
输出:
[
、「これは、」
テキスト」の例」、
"正当化"。
]
示例2:
入力:
言葉= [ "何"、 "MUST"、 "BE"、 "条の"、 "謝辞" "BE"]
のmaxWidth = 16
出力:
[
"何をしなければなりません"、
"確認"、
"しなければならないの"
]
説明:、代わりに「しなければならない」と「しなければならない」しなければならない形式の最後の行に注意してください
最後の行ではなく、その周りの、左寄せされなければならないので、正当化できませんでした。
二行目は、左詰めされ、この行が一つだけの単語が含まれているため。
例3:
输入:
言葉= [「科学」、「ある」、「何を」、「私たちは」、「だけでなく」、「理解」、「十分」、「に」、「説明」、
「へ」は、「」、「コンピュータ「、 『アート』、 『ある』、 『すべて』、 『他』、 『私たちは』、 『やる。』]
のmaxWidth = 20
输出:
[
『科学は、私たちが』何で
『』よくわから
説明するのに十分な」 「、と
コンピュータ」。アート「、ある
『他のすべては、私たち』
『やります』
]
class Solution {
public List<String> fullJustify(String[] words, int maxWidth) {
List<String> ret = new ArrayList<>();
int index = 0;
while(index < words.length){
int cur = index, len = 0;
// len + words[cur].length() + cur - index 为单词之间取 一个空格的长度
while(cur < words.length && len + words[cur].length() + cur - index <= maxWidth){
// 计算纯单词长度
len = len + words[cur++].length();
}
cur--;
// System.out.println(cur + " " + len);
StringBuilder sb = new StringBuilder();
// 区分最后一行
if(cur == words.length - 1){
for(int i = index; i <= cur; i++){
sb.append(words[i]);
if(i < cur){
sb.append(' ');
}
}
}else{
int base = cur > index ? (maxWidth - len) / (cur - index) : (maxWidth - len);
String baseStr = genSpace(base);
int left = cur > index ? (maxWidth - len) % (cur - index) : 0;
String leftStr = genSpace(base + 1);
for(int i = index; i <= cur; i++){
sb.append(words[i]);
if(i < cur){
sb.append(left > 0 ? leftStr : baseStr);
left--;
}
}
}
if(sb.length() < maxWidth){
sb.append(genSpace(maxWidth - sb.length()));
}
ret.add(sb.toString());
index = cur + 1;
}
return ret;
}
private String genSpace(int n){
char[] cs = new char[n];
Arrays.fill(cs, ' ');
return new String(cs);
}
}