文本左右对齐

题目链接

文本左右对齐

题目描述



注意点

  • words[i] 由小写英文字母和符号组成
  • 每个单词的长度大于 0,小于等于 maxWidth
  • 输入单词数组 words 至少包含一个单词
  • 要求尽可能均匀分配单词间的空格数量。如果某一行单词间的空格不能均匀分配,则左侧放置的空格数要多于右侧的空格数

解答思路

  • 模拟本题思路,除最后一行外,其余行每个单词中间要放入数量均匀分配的空格数量,且最后一个单词末尾无空格(只有一个单词的特殊情况除外),而最后一行的每个单词中间的空格数只有一个,最后一个单词添加空格至该行长度到maxWidth
  • 第一点是要找到每行应该有哪些单词,在判断加入单词长度是否超过maxWidth时,还要默认两个单词中间有一个空格(也就是该行的最少空格数量),以此为基础判断每行应该存放的单词
  • 第二点是要找到任意一行中每两个单词之间的空格数量,除最后一行外,单词间的空格数均匀分配,且如果无法完全均匀分配时左边单词间的空格数要多于右边单词间的空格数,例如5个单词间需要有10个空格,则应该是3、3、2、2的空格分配
  • 第三点是对最后一行中空格的特殊处理,其应该为单词间的空格数都为1,然后将剩余的空格都填充到该行末尾
  • 第四点是某一行只有一个单词的特殊处理,如果其最后一行的单词则规则不变,如果不是最后一行则要特殊判断特殊处理,也就是将剩余空格都添加到该单词末尾

代码

class Solution {public List<String> fullJustify(String[] words, int maxWidth) {List<String> res = new ArrayList<>();int idx = 0;while (idx < words.length) {// 该行写入的单词List<String> rowWords = new ArrayList<>();// 该行单词总长度int rowWordLen = 0;for (int i = idx; i < words.length; i++) {// 能否容纳下一个新单词// rowWords.size()为假设加入该单词需要的最小空格数// words[idx].length() + rowWordLen为假设加入该单词后的单词总长度if (rowWords.size() + words[idx].length() + rowWordLen > maxWidth) {break;}rowWords.add(words[idx]);rowWordLen += words[idx].length();idx++;}StringBuilder sb = new StringBuilder();// 已填充至最后一个单词->最后一行if (idx - 1 >= words.length - 1) {for (String word : rowWords) {sb.append(word + " ");}sb.deleteCharAt(sb.length() - 1);addSpace(sb, maxWidth - sb.length());} else {// 只有一个单词if (rowWords.size() == 1) {sb.append(rowWords.get(0));addSpace(sb, maxWidth - sb.length());} else {int basicSpace = (maxWidth - rowWordLen) / (rowWords.size() - 1);int residueSpace = (maxWidth - rowWordLen) % (rowWords.size() - 1);for (int i = 0; i < rowWords.size() - 1; i++) {sb.append(rowWords.get(i));int spaceCount = basicSpace;if (residueSpace > 0) {spaceCount++;residueSpace--;}addSpace(sb, spaceCount);}sb.append(rowWords.get(rowWords.size() - 1));}}res.add(sb.toString());}return res;}public void addSpace(StringBuilder sb, int spaceCount) {for (int i = 0; i < spaceCount; i++) {sb.append(" ");}}
}

关键点

  • 怎么找到某一行中的所有单词
  • 怎么判断某一行是否是最后一行
  • 模拟对非最后一行中的单词填充空格
  • 对某行只有一个单词的特殊处理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/701908.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity中URP实现水体(水下的扭曲)

文章目录 前言一、使用一张法线纹理&#xff0c;作为水下扭曲的纹理1、在属性面板定义一个纹理&#xff0c;用于传入法线贴图2、在Pass中&#xff0c;定义对应的纹理和采样器3、在常量缓冲区&#xff0c;申明修改 Tilling 和 Offset 的ST4、在顶点着色器&#xff0c;计算得到 应…

目标检测开源数据集——太阳能板缺陷

简介 太阳能板&#xff0c;也称为太阳能电池板&#xff0c;是一种将太阳能转化为电能的设备。它的主要作用包括&#xff1a; 提供电力&#xff1a;太阳能板通过吸收阳光&#xff0c;将其转化为直流电&#xff0c;这种电能可以被各种设备使用。例如&#xff0c;它可以为家庭、…

重生奇迹MU职业排行

1、魔法师&#xff1a;魔法师是奇迹MU中最具实力的职业之一&#xff0c;他们拥有顶级的范围输出能力&#xff0c;同时还具备不错的控制技能。此外&#xff0c;魔法师还具有位移和护盾保命技能&#xff0c;技能伤害非常高&#xff0c;使其在游戏中具有很高的生存和攻击能力。 2…

第十四章 Linux面试题

第十四章 Linux面试题 日志t.log(访问量)&#xff0c; 将各个ip地址截取&#xff0c;并统计出现次数&#xff0c;并按从大到小排序(腾 讯) http://192. 168200.10/index1.html http://192. 168.200. 10/index2.html http:/192. 168 200.20/index1 html http://192. 168 200.30/…

【Redis】搞懂过期删除策略和内存淘汰策略

1、过期删除策略 1.1、介绍 Redis 是可以对 key 设置过期时间的&#xff0c;因此需要有相应的机制将已过期的键值对删除&#xff0c;而做这个工作的就是过期键值删除策略。 每当我们对一个 key 设置了过期时间时&#xff0c;Redis 会把该 key 带上过期时间存储到一个过期字典…

【Web】CTFSHOW 常用姿势刷题记录(全)

目录 web801 web802 web803 web804 web805 web806 web807 法一&#xff1a;反弹shell 法二&#xff1a;vps外带 web808 web809 web810 web811 web812 web813 web814 web815 web816 web817 web818 web819 web820 web821 web822 web823 web824 web825…

软考45-上午题-【数据库】-数据操纵语言DML

一、INSERT插入语句 向SQL的基本表中插入数据有两种方式&#xff1a; ①直接插入元组值 ②插入一个查询的结果值 1-1、直接插入元组值 【注意】&#xff1a; 列名序列是可选的&#xff0c;若是所有列都要插入数值&#xff0c;则可以不写列名序列。 示例&#xff1a; 1-2、插…

yolov8学习笔记(一)网络结构

一、yolov8.yaml YOLOv8详解 【网络结构代码实操】&#xff1a; YOLOv8详解 【网络结构代码实操】-CSDN博客文章浏览阅读10w次&#xff0c;点赞559次&#xff0c;收藏2.9k次。YOLOv8 算法的核心特性和改动可以归结为如下&#xff1a;提供了一个全新的 SOTA 模型&#xff0c;包…

#LLM入门|Prompt#1.8_聊天机器人_Chatbot

聊天机器人设计 以会话形式进行交互&#xff0c;接受一系列消息作为输入&#xff0c;并返回模型生成的消息作为输出。原本设计用于简便多轮对话&#xff0c;但同样适用于单轮任务。 设计思路 个性化特性&#xff1a;通过定制模型的训练数据和参数&#xff0c;使机器人拥有特…

蛇形矩阵3

题目描述 把数1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;…&#xff0c;N*N按照“蛇形3”放入N*N矩阵的中&#xff0c;输出结果。 下面是N6的蛇形3的图示 输入格式 第一行1个正整数&#xff1a;N&#xff0c;范围在[1,100]。 输出格式 N行&#x…

Git笔记——3

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 一、合并模式和分支策略 二、bug分支 三、强制删除分支 四、创建远程仓库 五、克隆远程仓库_HTTPS和_SSH 克隆远程仓库_HTTPS 克隆远程仓库_SSH 六、向远程仓库…

【黑马程序员】3、TypeScript常用类型_黑马程序员前端TypeScript教程,TypeScript零基础入门到实战全套教程

课程地址&#xff1a;【黑马程序员前端TypeScript教程&#xff0c;TypeScript零基础入门到实战全套教程】 https://www.bilibili.com/video/BV14Z4y1u7pi/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 目录 3、TypeScript常用类型 3.1 类型注解 …

【统计分析数学模型】聚类分析: 系统聚类法

【统计分析数学模型】聚类分析&#xff1a; 系统聚类法 一、聚类分析1. 基本原理2. 距离的度量&#xff08;1&#xff09;变量的测量尺度&#xff08;2&#xff09;距离&#xff08;3&#xff09;R语言计算距离 三、聚类方法1. 系统聚类法2. K均值法 三、示例1. Q型聚类&#x…

四六级成绩爬取代码原创

在六级成绩刚发布时&#xff0c;只需要通过学生姓名和身份证号便可以查询到成绩 据此&#xff0c;我们可以利用selenium框架对学生的成绩进行爬取 首先我们要建立一个excel表格&#xff0c;里面放三列&#xff08;多几列也无所谓&#xff09;&#xff0c;第一列列名取为学生姓…

Seata Server 服务搭建

概述 Seata 分布式事务需要 Seata Seaver 支持&#xff0c;Seata Server在 架构中扮演着 事务管理器的角色。Seata 服务需要往 Nacos 注册中心注册、以及读取配置文件&#xff0c;因此 Seata 启动前需要部署 Nacos 环境。 安装包下载 下载地址: https://download.csdn.net/dow…

【《高性能 MySQL》摘录】第 2 章 MySQL 基准测试

文章目录 2.1 为什么需要基准测试2.2 基准测试的策略2.2.1 测试何种指标 2.3 基准测试方法2.3.1 设计和规划基准测试2.3.2 基准测试应该运行多长时间2.3.3 获取系统性能和状态2.3.4 获得准确的测试结果2.3.5 运行基准测试并分析结果2.3.6 绘图的重要性 2.4 基准测试工具…

MATLAB环境下基于NLEO的算法的脑电EEG信号自发活动瞬态检测

自发脑电信号是一种非平稳性很强的随机信号。在传统的脑电信号处理中&#xff0c;较公认的处理方法大多是建立在假设脑电图是准平稳信号的基础上&#xff0c;即认为它可以分成若干段&#xff0c;每一段的过程基本平稳&#xff0c;但段上叠加着瞬态。瞬态信号是有别于背景节率&a…

Linux环境非root用户配置SSH免密登录,并解决登录仍提示输入密码

Linux环境非root用户配置SSH免密登录&#xff0c;并解决登录仍提示输入密码 ssh免密登录的简单理解 以A和B进行举例&#xff1a;A免密登录B &#xff08;即在A服务器输入命令&#xff1a;ssh 非root用户名B的IP地址&#xff09;可以直接免密码直接登录 A生成私钥和公钥&#…

【Activiti7系列】Activi7简介和基于Spring Boot整合Activiti7(流程设计器)

本文将介绍Activiti7基础概念及基于Spring Boot整合Activiti7(流程设计器)的具体步骤。 作者&#xff1a;后端小肥肠 1. 前言 在企业级应用中&#xff0c;业务流程的管理和执行是至关重要的一环。Activiti7是一个强大的开源工作流引擎&#xff0c;它提供了灵活的流程定义、任务…

SpringBoot3+Vue3 基础知识(持续更新中~)

bean 把方法的返回结果注入到ioc中 1: 2: 3: 组合注解封装 实战篇&#xff1a; 解析token&#xff1a; 统一携带token&#xff1a; 驼峰命名与下划线命名转换&#xff1a; NotEmpty!!! mybatis&#xff1a; PageHelper设置后&#xff0c;会将pageNum,和pageSize自己拼接…