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

server/2024/9/23 18:31:26/

面试经典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/server/30202.html

相关文章

27.统一网关Gateway-路由断言工厂

在配置文件中写的断言规则只是字符串&#xff0c;这些字符串会被Predicate Factory读取并处理&#xff0c;转变为路由判断的条件。 例如&#xff1a;Path /user/** 是按照路劲匹配&#xff0c;这个规则是由 org.springframework.cloud.gateway.handler.predicate.PathRouteP…

如何搭建本地的 NPM 私有仓库 Nexus

NPM 本地私有仓库&#xff0c;是在本地搭建NPM私有仓库&#xff0c;对公司级别的组件库进行管理。在日常开发中&#xff0c;经常会遇到抽象公共组件的场景&#xff0c;在项目内部进行公用。新的项目开始时&#xff0c;也会拷贝一份创建一个新的项目&#xff0c;这样做不易于管理…

如何判断自己是不是表演型人格障碍?

表演型人格障碍&#xff0c;也叫寻求注意&#xff0c;寻求关注型人格&#xff0c;癔症型人格&#xff0c;是比较常见的人格障碍类型之一。其核心特征包括有&#xff1a;过分的情绪化&#xff0c;夸张的表现形式&#xff0c;渴望成为别人的关注点&#xff0c;其行为往往是幼稚的…

【蓝桥杯】基于STM32G431模块总结

目录 一.LED部分 二.按键部分 三.ADC部分 四.基于IIC的24c02读写部分&#xff08;EEPROM&#xff09; 五.LCD显示部分 六.定时器部分 1.定时器中断回调 2. PWM输出改变频率和占空比 3.输入捕获测量占空比和频率(利用主从模式) 4.方波输出回调 七.RTC部分 一.LED部分 …

J2EE模式

系列文章目录 J2EE模式特别关注表示层&#xff0c;这些模式是由 Sun Java Center 鉴定的&#xff0c; 包括&#xff1a; 1、 MVC模式&#xff08;MVCPattern&#xff09;&#xff1b; 2、 业务代表模式&#xff08;BusinessDelegatePattern&#xff09;&#xff1b; 3、 组合…

本地大语言模型LLM的高效运行专家 | Ollama

Ollama简介 Ollama是一个开源的大型语言模型服务工具&#xff0c;它帮助用户快速在本地运行大模型。通过简单的安装指令&#xff0c;用户可以执行一条命令就在本地运行开源大型语言模型&#xff0c;如Llama 2。Ollama极大地简化了在Docker容器内部署和管理LLM的过程&#xff0…

Facebook的语言学:社交媒体如何影响我们的沟通方式

1. 引言 社交媒体已经成为人们日常生活中不可或缺的一部分&#xff0c;而Facebook作为其中最具影响力的平台之一&#xff0c;不仅改变了人们之间的社交方式&#xff0c;也对我们的语言学产生了深远的影响。本文将深入探讨Facebook的语言学特点&#xff0c;以及它如何塑造和改变…

Golang | Leetcode Golang题解之第64题最小路径和

题目&#xff1a; 题解&#xff1a; func minPathSum(grid [][]int) int {if len(grid) 0 || len(grid[0]) 0 {return 0}rows, columns : len(grid), len(grid[0])dp : make([][]int, rows)for i : 0; i < len(dp); i {dp[i] make([]int, columns)}dp[0][0] grid[0][0]…