0068.文本左右对齐

方法一:字符串模拟

时间复杂度 O(m)O(m),空间复杂度 O(1)O(1),其中 m 表示所有字符串的总长度。

// 放置以 index 结尾的 num 个单词,确保字符串长度为 maxWidth func placestr(words []string, index, num, length, maxWidth int) string { if num == 1 { return words[index] + strings.Repeat(" ", maxWidth-length) } space, mod, substr := (maxWidth-length)/(num-1), (maxWidth-length)%(num-1), "" if index == len(words)-1 { space, mod = 1, maxWidth-length-num+1 } for i := index - num + 1; i < index; i++ { numspace := space if mod > 0 && index != len(words)-1 { numspace, mod = numspace+1, mod-1 } substr += words[i] + strings.Repeat(" ", numspace) } substr += words[index] + strings.Repeat(" ", mod) return substr } func fullJustify(words []string, maxWidth int) []string { ans, length, num := []string{}, 0, 0 for i := 0; i < len(words); i++ { if length+len(words[i])+num <= maxWidth { length, num = length+len(words[i]), num+1 continue } ans = append(ans, placestr(words, i-1, num, length, maxWidth)) length, num = len(words[i]), 1 } ans = append(ans, placestr(words, len(words)-1, num, length, maxWidth)) return ans }