classSolution{ funfullJustify(words: Array<String>, maxWidth: Int): List<String> { val result = mutableListOf<String>() val n = words.size var i = 0 while (i < n) { // >>> 统计一行能放多少个单词 // 这一行所有单词的长度 var wordsLength = 0 var j = i // 每个单词末尾一个空格数量的累加为 j - i while (j < n && wordsLength + words[j].length + j - i <= maxWidth) { wordsLength += words[j].length j++ } // <<<
// >>> 最后一行单独处理,因为处理空格的逻辑跟普通行不一样,所以放在普通行处理空格的前面 if (j == n) { val line = StringBuilder() for (k in i until j) { if (line.isNotEmpty()) line.append(" ") line.append(words[k]) } for (i in line.length until maxWidth) { line.append(" ") } result.add(line.toString()) break } // <<<
// >>> 平均分配空格到单词末尾 val line = StringBuilder() val wordCount = j - i val spaceLength = if (wordCount == 1) 0else (maxWidth - wordsLength) / (wordCount - 1) var extraSpaceLength = if (wordCount == 1) 0else (maxWidth - wordsLength) % (wordCount - 1) for (k in i until j) { // 空格分配在每个单词前面 if (line.isNotEmpty()) { repeat(spaceLength) { line.append(" ") } if (extraSpaceLength > 0) { line.append(" ") extraSpaceLength-- } } line.append(words[k]) } // <<<
// 对于一行只有一个单词和最后一行,末尾填充空格 for (i in line.length until maxWidth) { line.append(" ") }