LeetCode 68. 文本左右对齐|贪心算法+逐行精讲(Python)CSDN题解
标签:LeetCode、贪心算法、字符串处理、文本对齐、Python、面试高频、困难题难度:困难|核心考点:贪心策略、空格均匀分配、边界情况处理一、题目原题解读1.1 题目描述给定一个单词数组words和一个指定长度maxWidth,需要重新排版单词,生成符合要求的格式化文本,核心规则如下:每行恰好占maxWidth个字符,不多不少采用贪心算法放置单词:每行尽可能多放单词,放不下则换行单词间用空格填充,空格需尽可能均匀分配;若无法均分,左侧空格数多于右侧文本最后一行特殊处理:左对齐,单词间仅一个空格,剩余空格全部补在末尾若某一行只有一个单词:该单词左对齐,剩余空格全部补在右侧核心定义单词:由非空格字符组成的序列,长度大于0且不超过maxWidth输入保证:单词数组至少含一个单词,无需处理空输入1.2 示例演示(3组核心案例)示例1输入: words = ["This", "is", "an", "example", "of", "text", "justification."], maxWidth = 16 输出: [ "This is an", "example of text", "justification. " ]示例2输入:words = ["What","must","be","acknowledgment","shall","be"], maxWidth = 16 输出: [ "What must be", "acknowledgment ", "shall be " ] 解释: 最后一行左对齐,仅单词间一个空格,剩余空格补末尾;单行单词直接右补空格示例3输入:words = ["Science","is","what","we","understand","well","enough","to","explain","to","a","computer.","Art","is","everything","else","we","do"], maxWidth = 20 输出: [ "Science is what we", "understand well", "enough to explain to", "a computer. Art is", "everything else we", "do " ]1.3 关键约束与提示单词数量:1 ≤ words.length ≤ 300单个单词长度:1 ≤ words[i].length ≤ 20最大宽度:1 ≤ maxWidth ≤ 100,且单个单词长度≤maxWidth字符组成:小写英文字母+符号,无空格二、解题思路:贪心算法核心逻辑2.1 贪心策略拆解本题的贪心核心是**“行优先填满”**,每一步都选择当前能放下的最多单词,不考虑后续行,最大化每行单词数量,减少总行数,同时严格遵循空格分配规则,整体分为三大步骤:分组:遍历单词,按贪心规则将单词分成多行,确定每行包含哪些单词分情况处理:区分普通行(非最后一行、多行单词)、单行单词行、最后一行,分别计算空格拼接成行:按空格规则拼接单词,补满maxWidth长度,加入结果列表2.2 关键规则细化(必懂)情况1:普通行(非最后一行,含≥2个单词)计算总空格数:total_spaces = maxWidth - 该行所有单词总长度单词间间隔数:gap_num = 单词数量 - 1基础空格数:base_spaces = total_spaces // gap_num多余空格数:extra_spaces = total_spaces % gap_num(前extra_spaces个间隔,各多1个空格)情况2:单行单词行(任意位置,仅1个单词)单词左对齐,右侧直接补满空格,直至长度为maxWidth情况3:最后一行(无论单词数量)单词间仅一个空格,整体左对齐,剩余空格全部补在末尾,不做均分处理