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

力扣68.文本左右对齐

import java.util.ArrayList;
import java.util.List;

class Solution {
    public List<String> fullJustify(String[] words, int maxWidth) {
        List<String> result = new ArrayList<>(); // 创建一个列表用于存储结果
        int index = 0; // 初始化索引为0,用于遍历单词数组
        while (index < words.length) { // 当索引小于单词数组长度时,继续循环
            int count = words[index].length(); // 计算当前单词的长度
            int last = index + 1; // 初始化last为当前索引+1,用于确定当前行可以容纳的单词范围
            while (last < words.length) { // 当last小于单词数组长度时,继续循环
                if (words[last].length() + count + 1 > maxWidth) break; // 如果下一个单词加上当前单词长度和空格超过最大宽度,跳出循环
                count += words[last].length() + 1; // 累加单词长度和空格
                last++; // 更新last的值
            }
            StringBuilder builder = new StringBuilder(); // 创建一个StringBuilder用于构建当前行的字符串
            int diff = last - index - 1; // 计算当前行可以容纳的单词数量
            if (last == words.length || diff == 0) { // 如果是最后一行或者只有一个单词
                for (int i = index; i < last; i++) { // 遍历当前行的单词
                    builder.append(words[i] + " "); // 将单词添加到builder中,并在单词之间添加空格
                }
                builder.deleteCharAt(builder.length() - 1); // 删除最后一个多余的空格
                while (builder.length() < maxWidth) { // 如果当前行长度小于最大宽度,添加空格
                    builder.append(" ");
                }
            } else { // 如果不是最后一行且有多个单词
                int spaces = (maxWidth - count) / diff; // 计算每个单词之间的平均空格数
                int r = (maxWidth - count) % diff; // 计算需要额外添加一个空格的位置数
                for (int i = index; i < last - 1; i++) { // 遍历当前行的单词,除了最后一个
                    builder.append(words[i]); // 添加单词
                    builder.append(" "); // 添加空格
                    for (int j = 0; j < spaces + (i - index < r ? 1 : 0); j++) { // 根据平均空格数和额外空格数添加空格
                        builder.append(" ");
                    }
                }
                builder.append(words[last - 1]); // 添加最后一个单词
            }
            result.add(builder.toString()); // 将构建好的字符串添加到结果列表中
            index = last; // 更新索引为last,准备处理下一行
        }
        return result; // 返回结果列表
    }
}

http://www.kler.cn/news/285136.html

相关文章:

  • 18043 找出3个数中最大的数
  • Datawhale x李宏毅苹果书入门 AI夏令营 task03学习笔记
  • 数据结构——单向链表
  • 五、实现随机地图
  • 【STM32】通用定时器TIM(输出比较)
  • 【sqlite3】MySQL8转sqlite3需要对sql做的一些处理
  • PyCharm 自定义字体大小
  • C++ 有向图算法
  • Tiptap中BubbleMenu讲解
  • CAN协议通信 学习笔记
  • 如何使用Hive构建高校考试分析系统:大数据技术在教育领域的应用
  • Ubuntu中qt类与类信号槽的创建及使用
  • 滑动窗口元素的平均值 ← STL : deque
  • GD32F4xx---RTC初始化设置及闹钟方式实现秒中断讲解
  • 数据结构概念
  • 代码随想录算法训练营第 56 天 |108冗余连接 109冗余连接 II
  • 地平线—征程2(Journey 2-J2)芯片详解(28)—MIPI RX/TX+SD/SDIO/eMMC Interface Timings
  • Python Excel 操作全面总结
  • 计算物理精解【3】
  • 10分钟了解OPPO中间件容器化实践
  • ue Rotate to face BB entry转向不对
  • springboot+redis+mybatis体会布隆过滤器
  • VMware中安装 Ubuntu ,实现 Windows 和 Ubuntu 之间自由复制粘贴
  • 7个流行的开源数据治理工具
  • 51单片机.之ADC数字模拟转换
  • 如何使用vcftools提取特定的染色体
  • vim 修改文件
  • 常见协议工作原理 https ARP ICMP DHCP PING
  • 华为手机数据丢失如何恢复?
  • 具身智能(Embodied Intelligence)概述