185. go字符串拼接(力扣 68. 文本左右对齐)

时间:2021-09-10
本文章向大家介绍185. go字符串拼接(力扣 68. 文本左右对齐),主要包括185. go字符串拼接(力扣 68. 文本左右对齐)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
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)
	}
}

原文地址:https://www.cnblogs.com/liuzhanghao/p/15250489.html