面试经典150题——文本左右对齐

news/2024/10/19 23:31:53/

面试经典150题 day24

      • 题目来源
      • 我的题解
        • 方法一 模拟

题目来源

力扣每日一题;题序:68

我的题解

方法一 模拟

分情况讨论

  1. 是最后一行 ------------将所有字符串先组合在一起,然后在末尾加空格
  2. 是单个单词一行 ------------ 将单个字符串先组合在一起,然后在末尾加空格
  3. 其他情况 -------------求均分的空格数avg和均分后还剩余的空格数ex,[left,left+ex+1)之间插入的空格数为 avg+1,[left+ex+1,right)之间插入空格数为 avg,注意:在两个范围之间还需要插入一个 avg的空格数

时间复杂度:O(m)。其中 m 是数组 words 中所有字符串的长度之和
空间复杂度:O(m)

java">public List<String> fullJustify(String[] words, int maxWidth) {List<String> res=new ArrayList<>();int n=words.length;for(int i=0;i<n;){int start=i;int end=start+1;//len记录当前行的使用字符串构成的新字符串的长度(现贪心,单词间只加一个空格)int len=words[start].length();while(end<n&&len+words[end].length()+1<=maxWidth){len+=words[end].length()+1;end++;}StringBuilder sb=new StringBuilder();//最后一行if(end==n){for(int j=start;j<end;j++){sb.append(words[j]);if(j!=end-1)sb.append(' ');}insertSpace(sb,maxWidth-sb.length());//一行只有一个字符串}else if(start+1==end){sb.append(words[start]);insertSpace(sb,maxWidth-sb.length());}else{//在每两个字符之间加入1个空格后,还需要添加空格的数量int sub=maxWidth-len;//有多少个可以插入空格的位置int num=end-start-1;// 单词间实际需要插入的空格数(注意:这里是指右侧需要插入的空格数,左侧需要比右侧多1)int need=sub/num+1;//左侧应该有几个插入空格的地方int mod=sub%num;sb.append(words[start]);//先模拟左侧单词的加入for(int j=0;j<mod;j++){insertSpace(sb,need+1);sb.append(words[start+j+1]);}//再模拟右侧单词的加入for(int j=mod;j<num;j++){insertSpace(sb,need);sb.append(words[start+j+1]);}}res.add(sb.toString());i=end;}return res;
}public void insertSpace(StringBuilder sb,int count){for(int i=0;i<count;i++){sb.append(" ");}
}

有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~


http://www.ppmy.cn/news/1450337.html

相关文章

conda的一些问题

我是windows&#xff0c;conda下载的包下载到了c盘的.conda文件夹下&#xff0c;这是为什么&#xff1f; Conda 在 Windows 系统上默认会在用户的主目录下创建一个 .conda 文件夹&#xff0c;用来存储一些临时文件和包的缓存。这个路径是由 Conda 的默认配置决定的&#xff0c…

使用hutool工具导入excel Java

Hutool是一个Java工具类库&#xff0c;它提供了一系列实用的API&#xff0c;包括操作Excel的功能。要使用Hutool导入Excel&#xff0c;你可以使用ExcelReader类。以下是一个简单的例子&#xff0c;展示了如何使用Hutool导入Excel文件&#xff1a; import cn.hutool.poi.excel.…

OpenAI 新推出 AI 问答搜索引擎——SearchGPT 震撼登场

您的浏览器不支持 video 标签。 OpenAI-SearchGPT 近日&#xff0c;OpenAI 曝光了自己的一款令人瞩目的 AI 问答搜索引擎——SearchGPT。这款搜索引擎带来了全新的搜索体验&#xff0c;给整个行业带来了巨大的压力。 SearchGPT 支持多种强大的功能。首先&#xff0c;它能够通过…

Ridge,Lasso,Elasticnet回归

本文主要关于多元线性回归&#xff08;MSE&#xff09;与L1&#xff0c;L2范数结合在一起从而提高鲁棒性&#xff0c;即正则化应用于MSE产生的Ridge&#xff0c;Lasso&#xff0c;Elasticnet回归的内容。 一&#xff0c;Ridge回归 岭回归实质上就是普通的MSE加上一项L2惩罚项来…

OpenCV(二)—— 车牌定位

从本篇文章开始我们进入 OpenCV 的 Demo 实战。首先&#xff0c;我们会用接下来的三篇文章介绍车牌识别 Demo。 1、概述 识别图片中的车牌号码需要经过三步&#xff1a; 车牌定位&#xff1a;从整张图片中识别出牌照&#xff0c;主要操作包括对原图进行预处理、把车牌从整图…

Cocos Creator 3D物理引擎的碰撞检测与触发器详解

前言 Cocos Creator是一个强大的游戏开发引擎&#xff0c;拥有丰富的功能和工具&#xff0c;其中包括3D物理引擎。物理引擎是游戏开发中非常重要的一部分&#xff0c;它可以模拟现实世界中的物理规律&#xff0c;让游戏中的物体之间产生真实的交互。在Cocos Creator中&#xf…

GitHub Copilot申请和使用

GitHub Copilot申请和使用 文章目录 前言一、申请二、使用总结 前言 之前已经成功进行了Github学生认证&#xff0c;今天邮件通知之前的学生认证已经通过。那么就去进行GitHub Copilot申请和使用。 前面准备&#xff1a;Github学生认证 一、申请 进入github的settings&#x…

基于php+mysql+html超市商品管理系统(含论文)

博主介绍&#xff1a; 大家好&#xff0c;本人精通Java、Python、Php、C#、C、C编程语言&#xff0c;同时也熟练掌握微信小程序、Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验&#xff0c;能够为学生提供各类…