当前位置: 首页 > 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.lryc.cn/news/611395.html

相关文章:

  • 【web自动化测试】实战
  • Python基础框架
  • WebRTC音视频编码模块深度解析:从编解码器到自适应码率控制(2025技术实践)
  • 前端包管理器深度对比
  • 普通树状数组
  • 贪心算法学习 1
  • Zabbix 企业级高级应用
  • 风丘助力混合动力汽车工况测试:精准采集整车信号解决方案
  • VNC连接VirtualBox中的Ubuntu24.04 desktop图形化(GUI)界面
  • 2025年渗透测试面试题总结-01(题目+回答)
  • GitHub Models:为开源AI项目解决推理难题,让AI更易用、更普及
  • css初学者第三天
  • MySQL 如何优化慢查询
  • Redis中的sdshdr的len和alloc那块的知识点详解
  • 前端记录项目中用到的js
  • python可视化--Seaborn图形绘制方法和技巧,Bokeh图形绘制方法和技巧
  • 最新基于Python科研数据可视化实践技术
  • 磁悬浮转子振动控制:主动电磁力如何成为高速旋转的“振动克星”
  • css动态样式
  • 【Git学习】入门与基础
  • Cisco 3750X交换机更新到IOS 15.2后无法启动 提示:Boot process failed...
  • Laravel The requested URL /hellowzy was not found on this server. 404 问题的解决
  • 嵌入式 - 数据结构:循环链表和内核链表
  • ES 模块动态导入
  • Python深度学习:从入门到进阶
  • 《四种姿势用Java玩转AI大模型:从原生HTTP到LangChain4j》
  • 如何在nuxt项目中进行meta信息注入
  • 【RabbitMQ】高级特性—消息确认详解
  • 探索设计模式的宝库:Java-Design-Patterns
  • Android UI 组件系列(十一):RecyclerView 多类型布局与数据刷新实战