68. 文本左右对齐

题目链接:力扣

解题思路:遍历单词数组,确定每一行的单词数量, 之后就可以得到每一个需要补充的空格数量。从而得到单词之间需要补充的空格数量。具体算法如下:

  1. 确定每一行的单词数量
    1. 初始值:
      1. num = 0:单词数量
      2. realLength=0:这一行单词的长度
      3. isFinally = false:是否是最后一行
    2. 如果realLength+num<maxWidth(加上num是因为每一个单词后面至少要有一个空格),则进入循环:
      1. 如果realLength + num + words[i].length()>maxWidth:退出循环
      2. realLength +=words[i].length()
      3. num++;
      4. 如果i==words.length-1:说明已经是最后一行了,isFinally=true,退出循环
  2. 确定需要的空格数量:sum = maxWidth - realLength
  3. 确定每个单词之间需要的空格数量
    1. 如果是最后一行:则每个单词之间的空格数量固定为1,最后补充空格到长度为maxWidth
    2. 如果不是最后一行并且一行只有一个单词:单词左对齐,在最后补充空格
    3. 不是最后一行,并且有多个单词,则,每个单词之间平均最少需要的空格数量为avg=sum/(num-1),对于不能整数的情况,会剩余prevNum = sum%(num-1)个空格,因为需要将空格均匀分配,并且左边空格数量大于右边空格数量。所以可以将剩余的prevNum个空格依次放在前prevNum个单词之间,即前prevNum单词之间有avg+1个空格,剩下的单词之间有avg个空格

AC代码:

class Solution {public static List<String> fullJustify(String[] words, int maxWidth) {List<String> ans = new ArrayList<>();int pos = 0;boolean isFinally = false;while (pos < words.length) {int num = 0;int realLength = 0;for (int i = pos;i<words.length;i++){if (realLength + num + words[i].length() > maxWidth) {break;}realLength += words[i].length();num++;if (i == words.length-1) {isFinally = true;break;}}StringBuilder line = new StringBuilder();//如果是最后一行if (isFinally) {//需要补充的空格数量int blank = maxWidth - (realLength + num-1);while (num > 0) {line.append(words[pos]);if (num != 1) {line.append(' ');}pos++;num--;}while (blank > 0) {line.append(' ');blank--;}ans.add(line.toString());return ans;}//一共需要sum个空格int sum = maxWidth - realLength;//一行只有一个单词if (num==1){line.append(words[pos]);for (int i = 0; i < sum; i++) {line.append(' ');}pos++;ans.add(line.toString());continue;}//平均每个单词间需要的空格数量int avg = sum/(num-1);//前n个单词间需要avg+1个空格int preNum = sum % (num-1);for (int i =0;i<num;i++){line.append(words[pos++]);if (i!=num-1){if (i<preNum){for (int j=0;j<avg+1;j++){line.append(' ');}}else {for (int j=0;j<avg;j++){line.append(' ');}}}}ans.add(line.toString());}return ans;}
}

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

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

相关文章

【JavaWeb】正则表达式

&#x1f384;欢迎来到边境矢梦的csdn博文&#xff0c;本文主要讲解Java 中正则表达式 的相关知识&#x1f384; &#x1f308;我是边境矢梦&#xff0c;一个正在为秋招和算法竞赛做准备的学生&#x1f308; &#x1f386;喜欢的朋友可以关注一下&#x1faf0;&#x1faf0;&am…

2023年的深度学习入门指南(22) - 百川大模型13B的运行及量化

2023年的深度学习入门指南(22) - 百川大模型13B的运行及量化 不知道上一讲的大段代码大家看晕了没有。但是如果你仔细看了会发现&#xff0c;其实代码还是不全的。比如分词器我们就没讲。 另外&#xff0c;13B比7B的改进点也没有讲。 再有&#xff0c;对于13B需要多少显存我们…

ios 查看模拟器沙盒的路径

打一个断点运行程序&#xff0c;在xcode consol底部控制台输入&#xff1a; po NSHomeDirectory() 复制路径粘帖到前往文件夹打开沙盒缓存文件夹

Oracle存过-对象权限创建回收、同义词创建删除

Oracle存过-对象权限创建回收、同义词创建删除 -- Oracle存过-对象权限创建回收、同义词创建删除--得到对象授权语句--调用&#xff1a;CALL LOG.COMMON_PKG.get_tab_grant_privs_p(LOG,TZQ,INFO);PROCEDURE get_tab_grant_privs_p(pi_grantor IN VARCHAR2,pi_grantee IN …

golang pprof

pprof是一个用于分析数据的可视化和分析工具&#xff0c;由谷歌公司的开发团队使用go语言编写成的。一般用于对golang资源占用进行分析。不是原创&#xff0c;参考&#xff1a;https://juejin.cn/post/7122473470424219656 1. 通过页面查看golang运行情况 访问 http://127.0.0…

使用Streamlit快速搭建和共享交互式应用

大家好&#xff0c;在数据科学和机器学习领域&#xff0c;向他人展示见解和分享结果与分析本身同样重要&#xff0c;然而创建交互式和用户友好型的应用程序通常需要复杂的框架和耗时的开发过程。Streamlit是一个Python库&#xff0c;它简化了以数据为重点的网络应用程序的创建过…

ppt怎么压缩到10m以内?分享好用的压缩方法

PPT是一种常见的演示文稿格式&#xff0c;有时候文件过大&#xff0c;我们会遇到无法发送、上传的现象&#xff0c;这时候简单的解决方法就是压缩其大小&#xff0c;那怎么才能将PPT压缩到10M以内呢&#xff1f; PPT文件大小受到影响的主要因素就是以下几点&#xff1a; 1、图…

如何使用 PHP 进行数据库连接池优化?

连接池是一个存放数据库连接的地方&#xff0c;就像一个水池&#xff0c;你在这里可以得到数据库连接。这比每次都新建和关闭连接要快得多&#xff0c;因为连接池中的连接是可以重复使用的。 下面是一个简单的例子&#xff0c;展示如何使用PHP和PDO&#xff08;PHP Data Objec…

Keepalived 在CentOS安装

下载 有两种下载方式&#xff0c;一种为yum源下载&#xff0c;另一种通过源代码下载&#xff0c;本文章使用源代码编译下载。 官网下载地址&#xff1a;https://www.keepalived.org/download.html wget https://www.keepalived.org/software/keepalived-2.0.20.tar.gz --no-…

Android 项目架构

🔥 什么是架构 🔥 在维基百科里是这样定义的: 软件架构是一个系统的轮廓 . 软件架构描述的对象是直接构成系统的抽象组件. 各个组件之间的连接则明确和相对细致地描述组件之间的通讯 . 在实现阶段, 这些抽象组件被细化为实际组件 , 比如具体某个类或者对象 . 面试的过程中…

CNN卷积详解

转载自&#xff1a;https://blog.csdn.net/yilulvxing/article/details/107452153 仅用于自己学习过程中经典文章讲解的记录&#xff0c;防止原文失效。 1&#xff1a;单通道卷积 以单通道卷积为例&#xff0c;输入为&#xff08;1,5,5&#xff09;&#xff0c;分别表示1个通道…

libuv库学习笔记-networking

Networking 在 libuv 中&#xff0c;网络编程与直接使用 BSD socket 区别不大&#xff0c;有些地方还更简单&#xff0c;概念保持不变的同时&#xff0c;libuv 上所有接口都是非阻塞的。它还提供了很多工具函数&#xff0c;抽象了恼人、啰嗦的底层任务&#xff0c;如使用 BSD …

Git拉取远程分支并创建本地分支

一、查看远程分支 使用如下git命令查看所有远程分支&#xff1a; git branch -r 查看远程和本地所有分支&#xff1a; git branch -a 查看本地分支&#xff1a; git branch 在输出结果中&#xff0c;前面带* 的是当前分支。 二、拉取远程分支并创建本地分支 方法一 使用…

支配树学习笔记

学习链接【学习笔记】支配树_cz_xuyixuan的博客-CSDN博客 主要的求法是最后两个结论&#xff1a; 定理4用来求sdom&#xff0c;先搞一个dfs树&#xff0c;然后将点按dfs序从大到小加入&#xff0c;对每个点维护到当前根&#xff08;即已加入点&#xff09;路径上sdom最小是哪个…

CentOS 8上安装和配置Redis

在本篇博客中&#xff0c;我们将演示如何在CentOS 8上安装和配置Redis。我们将首先安装Redis&#xff0c;然后配置Redis以设置密码并允许公开访问。 步骤 1&#xff1a;安装Redis 首先&#xff0c;更新软件包列表&#xff1a; sudo yum update安装Redis&#xff1a; sudo yum …

sky-notes-01

1、DTO类 DTO&#xff08;Data Transfer Object&#xff09;&#xff1a;数据传输对象&#xff0c;Service 或 Manager 向外传输的对象。 详见阿里巴巴Java开发手册中的DO、DTO、BO、AO、VO、POJO定义 当前端提交的数据和实体类中对应的属性差别比较大时&#xff0c;建议使用…

session无法读取问题解决(cookie浏览器权限)

问题 使用go的 "github.com/gin-contrib/sessions"库对session进行设置并获取时&#xff0c;浏览器拒绝掉请求携带cookie&#xff0c;体现在浏览器上为“被过滤掉的session”&#xff0c;并携带小三角提示符。 基本概念 SameSite Chrome 51 开始&#xff0c;浏览…

顺序栈的基本操作(2种实现方式)

0.定义 #define MaxSize 50 typedef struct {Elemtype data[MaxSize];int top; }SqStack;1.初始化 void InitStack(SqStack &S) {S.top -1; }2.判空 bool StackEmpty(SqStack S) {if(S.top -1)return true;elsereturn false; }3.进栈 ①实现一&#xff1a;栈顶指针指…

Ansible最佳实践之Playbook管理滚动更新

写在前面 理解不足小伙伴帮忙指正 傍晚时分&#xff0c;你坐在屋檐下&#xff0c;看着天慢慢地黑下去&#xff0c;心里寂寞而凄凉&#xff0c;感到自己的生命被剥夺了。当时我是个年轻人&#xff0c;但我害怕这样生活下去&#xff0c;衰老下去。在我看来&#xff0c;这是比死亡…

级联选择框

文章目录 实现级联选择框效果图实现前端工具版本添加依赖main.js导入依赖级联选择框样式 后端数据库设计 实现级联选择框 效果图 实现 前端 工具版本 node.js v16.6.0vue3 级联选择框使用 Element-Plus 实现 添加依赖 在 package.json 添加依赖&#xff0c;并 npm i 导入…