package main
import (
"strings"
)
func blank(n int) string {
return strings.Repeat(" ", n)
}
// 关于官网这种代码结构是在很让人失望, 所有处理都在同一个函数中很不好
func fullJustify(words []string, maxWidth int) (ans []string) {
right, n := 0, len(words)
for {
left := right // 记录一行的其实索引
sumLen := 0
// 循环判断当前right可以到哪里
for right < n && sumLen+len(words[right])+right-left <= maxWidth {
sumLen += len(words[right])
right++
}
// 如果是最后一行的话需要特殊处理
if right == n {
s := strings.Join(words[left:], " ")
ans = append(ans, s+blank(maxWidth-len(s)))
return
}
// 单词数量和空格数量
numWords := right - left
numSpace := maxWidth - sumLen
// 当前行只有一个单词与
if numWords == 1 {
ans = append(ans, words[left]+blank(numSpace))
continue
}
// 当前行单词>1
avgSpace := numSpace / (numWords - 1)
extraSpace := numSpace % (numWords - 1)
s1 := strings.Join(words[left:left+extraSpace+1], blank(avgSpace+1))
s2 := strings.Join(words[left+extraSpace+1:right], blank(avgSpace))
ans = append(ans, s1+blank(avgSpace+1)+s2)
}
}