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)
}
}
185. go字符串拼接(力扣 68. 文本左右对齐)
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
上一篇:186.go 遍历中文字符串
下一篇:187.python高级排序
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
java中字符串拼接的多种方式
java中字符串拼接的多种方式
java 字符串拼接 -
68. 文本左右对齐
68. 文本左右对齐方法一:模拟
python List -
68. 文本左右对齐 : 字符串大模拟
题目描述 这是 LeetCode 上的 68. 文本左右对齐 ,难度为 困难。 Tag : 「模拟」、「字符串」 给定一
LeetCode 算法 左对齐 字符串 两端对齐 -
【刷穿 LeetCode】68. 文本左右对齐 : 字符串模拟
这是 LeetCode 上的 68. 文本左右对齐 ,难度为 困难。 Tag : 「模拟」、「字符串」
LeetCode 算法 左对齐 字符串 i++ -
LeetCode - #68 文本左右对齐
我们社区陆续会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。)的 Swift 算法题题解整理为文字版以方便大家学习与阅读。
LeetCode Swift iOS swift 左对齐