Golang | Leetcode Golang题解之第68题文本左右对齐

题目:

题解:

// blank 返回长度为 n 的由空格组成的字符串
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 // 当前行的第一个单词在 words 的位置
        sumLen := 0   // 统计这一行单词长度之和
        // 循环确定当前行可以放多少单词,注意单词之间应至少有一个空格
        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
        numSpaces := maxWidth - sumLen

        // 当前行只有一个单词:该单词左对齐,在行末填充剩余空格
        if numWords == 1 {
            ans = append(ans, words[left]+blank(numSpaces))
            continue
        }

        // 当前行不只一个单词
        avgSpaces := numSpaces / (numWords - 1)
        extraSpaces := numSpaces % (numWords - 1)
        s1 := strings.Join(words[left:left+extraSpaces+1], blank(avgSpaces+1)) // 拼接额外加一个空格的单词
        s2 := strings.Join(words[left+extraSpaces+1:right], blank(avgSpaces))  // 拼接其余单词
        ans = append(ans, s1+blank(avgSpaces)+s2)
    }
}

相关推荐

  1. 面试经典---68.文本左右对齐

    2024-05-04 17:38:03       56 阅读
  2. leetcode 68. 文本左右对齐

    2024-05-04 17:38:03       65 阅读
  3. 面试经典150——文本左右对齐

    2024-05-04 17:38:03       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-04 17:38:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-04 17:38:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-04 17:38:03       87 阅读
  4. Python语言-面向对象

    2024-05-04 17:38:03       96 阅读

热门阅读

  1. FileOutputStream

    2024-05-04 17:38:03       34 阅读
  2. 微信小程序开发中的微信分享和朋友圈分享设置

    2024-05-04 17:38:03       52 阅读
  3. Go-变量

    Go-变量

    2024-05-04 17:38:03      66 阅读
  4. 微信小程序开发中的多国语言支持和国际化

    2024-05-04 17:38:03       35 阅读
  5. 桌面运维岗面试三十问

    2024-05-04 17:38:03       21 阅读
  6. 2024.04.11校招 实习 内推 面经

    2024-05-04 17:38:03       40 阅读
  7. Python 正则表达式2 语法基础

    2024-05-04 17:38:03       29 阅读
  8. 上海计算机学会2020年7月月赛C++丙组T4数字验证

    2024-05-04 17:38:03       32 阅读
  9. 【protobuf】protobuf 开发 (二)

    2024-05-04 17:38:03       36 阅读
  10. 卷积神经网络

    2024-05-04 17:38:03       31 阅读
  11. typescript 学习笔记

    2024-05-04 17:38:03       34 阅读
  12. vue如何实现异步组件

    2024-05-04 17:38:03       38 阅读