1. 问题背景与核心挑战
文本对齐是文字处理中的经典问题,LeetCode第68题要求我们实现一个模拟文本编辑器中左右对齐功能的算法。给定一个单词数组和最大行宽maxWidth,我们需要重新排版单词,使其满足以下要求:
- 每行恰好有maxWidth个字符
- 单词之间用空格分隔
- 尽可能均匀分配空格,无法均匀时左侧空格数多于右侧
- 最后一行左对齐且单词间不插入额外空格
这个看似简单的排版问题,实际上考察了多个算法核心能力:
- 字符串处理的精确控制
- 边界条件的全面考虑
- 贪心算法的实际应用
- 复杂逻辑的模块化实现
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 贪心算法策略解析
2.1 贪心选择性质
本题适合采用贪心算法的根本原因在于其具有贪心选择性质:每一行的单词选择只与当前剩余空间有关,不受后续行的影响。具体表现为:
- 局部最优导致全局最优:每行尽可能多地放置单词(在不超过maxWidth的前提下),这种局部最优选择不会影响后续行的处理
- 无后效性:当前行的单词选择完成后,后续行的处理不需要回溯或修改前面的决策
2.2 算法框架设计
基于贪心策略,我们可以将问题分解为三个子任务:
- 单词分组:确定每行包含哪些单词
- 空格分配:计算单词间需要插入的空格数
- 特殊处理:最后一行和其他行的不同处理方式
python复制def fullJustify(words, maxWidth):
result = []
current_line = []
current_length = 0
for word in words:
# 判断当前单词是否能加入当前行
if current_length + len(word) + len(current_line) <= maxWidth:
current_line.append(word)
current_length += len(word)
else:
# 处理当前行
result.append(process_line(current_line, max
