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

【文本左右对齐】

在这里插入图片描述

思路分析

1. 辅助函数
  1. blank(n)

    • 生成由 n 个空格组成的字符串。
    • 示例:blank(3)" "
  2. join(words, left, right, sep)

    • words[left..right-1] 用分隔符 sep 拼接成字符串。
    • 示例:join(["a","b","c"], 0, 3, "-")"a-b-c"
2. 主函数 fullJustify
外层循环
while (true) {int left = right;  // 当前行的起始单词int sum = 0;       // 当前行单词总长度// 计算当前行能放的单词while (right < n && sum + words[right].size() + (right - left) <= maxWidth) {sum += words[right++].size();}// ...
}
  • 作用:确定每行可以放置哪些单词。
  • 关键条件
    sum + words[right].size() + (right - left) <= maxWidth
    表示当前单词长度 + 已有单词长度 + 最小空格数(每个间隔至少 1 空格)不超过 maxWidth
处理最后一行
if (right == n) {string s = join(words, left, n, " ");  // 左对齐,单词间单空格ans.emplace_back(s + blank(maxWidth - s.size()));  // 行末补空格return ans;
}
  • 规则:最后一行左对齐,单词间单空格,行末补足空格。
处理单单词行
if (numWords == 1) {ans.emplace_back(words[left] + blank(numSpace));continue;
}
  • 规则:单单词左对齐,行末补足空格。
处理多单词行
int avgSpace = numSpace / (numWords - 1);  // 基础空格数
int extraSpace = numSpace % (numWords - 1); // 多余空格数
string s1 = join(words, left, left + extraSpace + 1, blank(avgSpace + 1));
string s2 = join(words, left + extraSpace + 1, right, blank(avgSpace));
ans.emplace_back(s1 + blank(avgSpace) + s2);
  • 步骤
    1. 计算空格分配
      • avgSpace:每个间隔的基础空格数。
      • extraSpace:前几个间隔需多分 1 个空格。
    2. 分割单词
      • s1:前 extraSpace + 1 个单词,用 avgSpace + 1 空格连接。
      • s2:剩余单词,用 avgSpace 空格连接。
    3. 拼接结果s1s2 之间用 avgSpace 空格连接。
class Solution {
public:string blank(int n){return string(n,' ');}string join(vector<string>&words,int left,int right,string sep){string s=words[left];for(int i=left+1;i<right;i++){s+=sep+words[i];}return s;}vector<string> fullJustify(vector<string>& words, int maxWidth) {vector<string> ans;int right=0,n=words.size();while(1){int left=right;int sum=0;while(right<n&&sum+words[right].size()+right-left<=maxWidth){sum+=words[right++].size();}if(right==n){string s=join(words,left,n," ");ans.emplace_back(s+blank(maxWidth-s.size()));return ans;}int numWords=right-left;int numSpace=maxWidth-sum;if(numWords==1){ans.emplace_back(words[left]+blank(numSpace));continue;}int avgSpace=numSpace/(numWords-1);int extraSpace=numSpace%(numWords-1);string s1=join(words,left,left+extraSpace+1,blank(avgSpace+1));string s2=join(words,left+extraSpace+1,right,blank(avgSpace));ans.emplace_back(s1+blank(avgSpace)+s2);}}
};
http://www.dtcms.com/a/316974.html

相关文章:

  • 落霞归雁:从自然之道到“存内计算”——用算法思维在芯片里开一条“数据高速航道”
  • SpringCloud学习-------Feign详解
  • 面试题:前端权限设计
  • 【Spring Cloud】-- 注册中心
  • 广东省省考备考(第六十七天8.5)——资料分析、数量(强化训练)
  • Python 循环语法详解
  • Pandas数据分析完全指南:从入门到实战应用
  • vi编辑器makefile的使用以及双向链表
  • Sklearn 机器学习 数据聚类 层次聚类的两个重要属性
  • c# 在 23:00 - 23:59 之间执行一次的写法
  • 【重要区分】2类模型的时间平均车速与区间平均车速
  • ApacheCon Asia 2025 中国开源年度报告:Apache Doris 国内第一
  • STM32设置GPIO模式
  • P1103《书本整理》精讲
  • CubeMX安装芯片包
  • Go语言 反射
  • golang的切片
  • Vue.js之核心语法与指令
  • 每日五个pyecharts可视化图表-bars(4)
  • mac colima解决容器化部署权限问题 :Permission denied
  • 三款好用的PDF阅读器
  • PLC学习之路-基础知识-(一)
  • 无刷电机控制 - STM32F405+CubeMX+HAL库+SimpleFOC05,完成霍尔传感器的校准
  • leetcode-python-删除链表的倒数第 N 个结点
  • 初始化列表,变量存储区域和友元变量
  • AcWing 3690:求交点 ← 复旦大学考研机试题 + 克莱姆法则
  • zyh贪心类题目补题报告
  • Spring配置JDBC,使用JdbcTemplate套件和Druid套件
  • IDEA JAVA工程入门
  • CVPR优秀论文 | DashGaussian:在200秒内优化三维高斯点绘制