当前位置: 首页 > news >正文

LeetCode(24)文本左右对齐【数组/字符串】【困难】

在这里插入图片描述

目录

    • 1.题目
    • 2.答案
    • 3.提交结果截图

链接: 文本左右对齐

1.题目

给定一个单词数组 words 和一个长度 maxWidth ,重新排版单词,使其成为每行恰好有 maxWidth 个字符,且左右两端对齐的文本。

你应该使用 “贪心算法” 来放置给定的单词;也就是说,尽可能多地往每行中放置单词。必要时可用空格 ' ' 填充,使得每行恰好有 maxWidth 个字符。

要求尽可能均匀分配单词间的空格数量。如果某一行单词间的空格不能均匀分配,则左侧放置的空格数要多于右侧的空格数。

文本的最后一行应为左对齐,且单词之间不插入额外的空格。

注意:

  • 单词是指由非空格字符组成的字符序列。
  • 每个单词的长度大于 0,小于等于 maxWidth
  • 输入单词数组 words 至少包含一个单词。

示例 1:

输入: words = ["This", "is", "an", "example", "of", "text", "justification."], maxWidth = 16
输出:
["This    is    an","example  of text","justification.  "
]

示例 2:

输入:words = ["What","must","be","acknowledgment","shall","be"], maxWidth = 16
输出:
["What   must   be","acknowledgment  ","shall be        "
]
解释: 注意最后一行的格式应为 "shall be    " 而不是 "shall     be",因为最后一行应为左对齐,而不是左右两端对齐。       第二行同样为左对齐,这是因为这行只包含一个单词。

示例 3:

输入:words = ["Science","is","what","we","understand","well","enough","to","explain","to","a","computer.","Art","is","everything","else","we","do"],maxWidth = 20
输出:
["Science  is  what we","understand      well","enough to explain to","a  computer.  Art is","everything  else  we","do                  "
]

提示:

  • 1 <= words.length <= 300
  • 1 <= words[i].length <= 20
  • words[i] 由小写英文字母和符号组成
  • 1 <= maxWidth <= 100
  • words[i].length <= maxWidth

2.答案

class Solution {public List<String> fullJustify(String[] words, int maxWidth) {if (words.length == 1) {int leftSpaceNum = maxWidth - words[0].length();char[] leftSpaces = new char[leftSpaceNum];Arrays.fill(leftSpaces, ' ');return Collections.singletonList(words[0] + new String(leftSpaces));}List<String> lines = new ArrayList<>();int i = 1;int length = words[0].length();List<String> lineWords = new ArrayList<>();lineWords.add(words[0]);while (i < words.length) {if (length + 1 + words[i].length() <= maxWidth) {// 记录每行的单词lineWords.add(words[i]);length = length + 1 + words[i++].length();} else {// 已经记满一行String line = wordsToLine(lineWords, maxWidth, false);lines.add(line);lineWords.clear();lineWords.add(words[i]);length = words[i++].length();}}String line = wordsToLine(lineWords, maxWidth, true);lines.add(line);return lines;}/*** 将单词转化为一行* @param lineWords* @return*/private String wordsToLine(List<String> lineWords, int maxWidth, boolean isLastLine) {assert lineWords.size() >= 1;int wordsLength = lineWords.stream().mapToInt(String::length).sum();if (!isLastLine && lineWords.size() > 1) {// 非最后一行// 计算每个间隔空格int eachSpaceNum = (maxWidth - wordsLength) / (lineWords.size() - 1);char[] eachSpaces = new char[eachSpaceNum];Arrays.fill(eachSpaces, ' ');String eachSpaceStr = String.valueOf(eachSpaces);// 计算第一个间隔额外空格数int leftSpaceNum = (maxWidth - wordsLength) % (lineWords.size() - 1);StringBuilder builder = new StringBuilder();for (int i = 0; i < lineWords.size(); i++) {builder.append(lineWords.get(i));if (i != lineWords.size() - 1) {builder.append(eachSpaceStr);if (leftSpaceNum > 0) {builder.append(" ");leftSpaceNum--;}}}return builder.toString();} else {// 最后一行,左对齐即可StringBuilder builder = new StringBuilder();for (int i = 0; i < lineWords.size(); i++) {builder.append(lineWords.get(i));if (i != lineWords.size() - 1) {builder.append(" ");}}int leftSpaceNum = maxWidth - wordsLength - (lineWords.size() - 1);char[] leftSpaces = new char[leftSpaceNum];Arrays.fill(leftSpaces, ' ');builder.append(new String(leftSpaces));return builder.toString();}}
}

3.提交结果截图

在这里插入图片描述

整理完毕,完结撒花~ 🌻

http://www.lryc.cn/news/235158.html

相关文章:

  • Spring-Spring之事务底层源码解析
  • 后端面经学习自测(三)
  • 力扣labuladong——一刷day40
  • 在VS Code中使用VIM
  • 注解【元数据,自定义注解等概念详解】(超简单的好吧)
  • vue-pdf在vue框架中的使用
  • Wordpress页面生成器:Elementor 插件制作网站页面教程(图文完整)
  • 完全随机设计的方差分析
  • 035、目标检测-物体和数据集
  • 【开源】基于Vue.js的社区买菜系统的设计和实现
  • 【双指针】复写0
  • 记录一些涉及到界的题
  • Linux秋招面试题
  • OPPO发布AndesGPT大模型;Emu Video和Emu Edit的新突破
  • 2311rust,到46版本更新
  • Rust根据条件删除相邻元素:dedup
  • 2023年(第六届)电力机器人应用与创新发展论坛-核心PPT资料下载
  • Android BitmapFactory.decodeResource读取原始图片装载成原始宽高Bitmap,Kotlin
  • 阿里云服务器 手动搭建WordPress(CentOS 8)
  • 竞赛 题目:基于深度学习的中文对话问答机器人
  • CCF ChinaSoft 2023 论坛巡礼|软件测试产教研融合论坛
  • 浅谈WPF之控件模板和数据模板
  • 微信小程序会议OA首页-开发说明创建项目关于flex布局关于尺寸单位(rpx)关于WXS轮播图会议信息
  • Linux上编译和安装SOFA23.06
  • 定时任务 Spring Task
  • golang 上传图片 --chatGPT
  • Android Studio 写一个Java调用c++ 的demo
  • Pandas数据操作_Python数据分析与可视化
  • 【Debug】查询的数据量比数据库中的数据量还要多
  • nodejs微信小程序-慢性胃炎健康管理系统的设计与实现-安卓-python-PHP-计算机毕业设计