| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 | 
							- package main
 
- import (
 
- 	"strings"
 
- )
 
- func fullJustify(words []string, maxWidth int) (ans []string) {
 
- 	beg, width := 0, -1
 
- 	for i := range words {
 
- 		if width+len(words[i]) >= maxWidth {
 
- 			// Arrange words in [beg, i)
 
- 			ans = append(ans, arrange(words, beg, i, width, maxWidth))
 
- 			// Reset status
 
- 			beg, width = i, -1
 
- 		}
 
- 		width += len(words[i]) + 1
 
- 	}
 
- 	// Arrange the last group of words,
 
- 	// the last line must be left-justified instead of fully-justified.
 
- 	prefix := strings.Join(words[beg:], " ")
 
- 	trail := strings.Repeat(" ", maxWidth-len(prefix))
 
- 	ans = append(ans, prefix+trail)
 
- 	return
 
- }
 
- func arrange(words []string, beg, end, width, maxWidth int) string {
 
- 	n := end - beg
 
- 	space := maxWidth - (width - n + 1)
 
- 	if n == 1 {
 
- 		return words[beg] + strings.Repeat(" ", space)
 
- 	}
 
- 	gap, remain := space/(n-1), space%(n-1)
 
- 	var sb strings.Builder
 
- 	for i := 0; i < n; i++ {
 
- 		sb.WriteString(words[beg+i])
 
- 		if space > 0 {
 
- 			sb.WriteString(strings.Repeat(" ", gap))
 
- 			space -= gap
 
- 			if i < remain {
 
- 				sb.WriteByte(' ')
 
- 				space--
 
- 			}
 
- 		}
 
- 	}
 
- 	return sb.String()
 
- }
 
- // func main() {
 
- // 	w := []string{"Science", "is", "what", "we", "understand", "well", "enough", "to", "explain",
 
- // 		"to", "a", "computer.", "Art", "is", "everything", "else", "we", "do"}
 
- // 	fmt.Println(fullJustify(w, 20))
 
- // 	w = []string{"What", "must", "be", "acknowledgment", "shall", "be"}
 
- // 	fmt.Println(fullJustify(w, 16))
 
- // }
 
 
  |