Leetcode算法——68、文本对齐(text justification)

多层感知机 Multilayer Perceptron | MLP 本文主要简单介绍了多层感知机的基本概念,优缺点,应用场景,建模时的注意事项,评价指标,实现方法,python示例和模型的参数等。 阅读详情

给定一个单词序列和一个最大宽度maxWidth,将文本进行格式化,每一行的字符长度为maxWidth。

需要使用贪婪的方法来格式化:在每一行中放入尽可能多的单词。有必要的话,可以添加额外的空格’ ',来保证每行的长度严格等于maxWidth。

单词之间的空格要尽可能均分。如果一行中的空格数量不能被均分,则左边的空位要比右边的空位包含的空格数要多。

特殊规则:文本的最后一行,在单词之间只能出现一个空格。

备注:

  • 一个单词指的是不包含空格的连续字符。
  • 每个单词的长度保证大于0,且不超过maxWidth。
  • 输入的序列至少包含一个单词。

示例:

Example 1:
Input:
words = ["This", "is", "an", "example", "of", "text", "justification."]
maxWidth = 16
Output:
[
   "This    is    an",
   "example  of text",
   "justification.  "
]

Example 2:
Input:
words = ["What","must","be","acknowledgment","shall","be"]
maxWidth = 16
Output:
[
  "What   must   be",
  "acknowledgment  ",
  "shall be        "
]
Explanation: Note that the last line is "shall be    " instead of "shall     be",
             because the last line must be left-justified instead of fully-justified.
             Note that the second line is also left-justified becase it contains only one word.

Example 3:
Input:
words = ["Science","is","what","we","understand","well","enough","to","explain",
         "to","a","computer.","Art","is","everything","else","we","do"]
maxWidth = 20
Output:
[
  "Science  is  what we",
  "understand      well",
  "enough to explain to",
  "a  computer.  Art is",
  "everything  else  we",
  "do                  "
]

思路

递归法

既然使用贪婪方法,那么第一行的结果与其他行结果无关,也不用在全局上保证什么优化目标,因此可以使用递归法,先按照贪婪法生成第一行字符,然后递归处理剩余行。

步骤如下:

  • 尽可能多地选出不超过 maxWidth 的前 k 个单词。注意:单词之间至少要有一个空格,也要算上。
  • 计算前 k 个单词的字符总个数 count,然后剩余需要添加的空格数为 maxWidth - count
  • 按照尽可能均分的原则,计算出每个单词后面需要添加的空格数。
  • 将单词和空格拼接在一起,形成第一行的字符串。
  • 递归处理剩余单词。
  • 递归结束条件:所有单词都可以放入一行,则说明是最后一行,递归结束。同时注意,最后一行的规则比较特殊,不要求均分空格,每个单词之间只有一个空格,其余空格放到最后。

python实现

def fullJustify(words, maxWidth):
    """
    :type words: List[str]
    :type maxWidth: int
    :rtype: List[str]
    
    """
    width = 0
    char_count = 0
    word_list = []
    for i in range(len(words)):
        # 尝试追加一个单词
        width += len(words[i])
        if i > 0:
            width += 1 # 单词之间至少加一个空格
        # 判断是否越界
        if width > maxWidth:
            break
        word_list.append(words[i])
        char_count += len(words[i])
    else: # 从来没有break过,是最后一行,也是递归结束条件
        result = ' '.join(word_list)
        result += ' ' * (maxWidth - len(result))
        return [result]
    # 将剩余空格数尽可能平均分配
    space_count = maxWidth - char_count # 需要填补的空格个数
    wc = len(word_list)
    if wc == 1: # 这一行只有一个单词,不用分配
        result = word_list[0] + ' ' * space_count
    else:
        result = word_list[0]
        basic, extra = divmod(space_count, wc - 1)
        for j in range(1, wc):
            if j <= extra: # 前extra个缝隙,要多一个空格
                result += ' '
            result += ' ' * basic + word_list[j]
    # 递归进行后面的
    return [result] + fullJustify(words[i:], maxWidth)
    
            
if '__main__' == __name__:
    words = ["This", "is", "an", "example", "of", "text", "justification."]
    maxWidth = 16
    print('\n'.join(fullJustify(words, maxWidth)))
【R语言】基于Biomod2集成平台探究物种分布区的构建流程(SDMs) 我为什么想要写这个内容呢?其实我已经想了很久了,但是一直没有把所有的代码给理清楚,此外这将是我之后研究的主要方向。本博客讲述了如何基于Biomod2集成平台构建物种分布模型的全流程,以及我在使用该模型时的一些心得,同时还有我提供的一些小福利(一键处理代码),可以十分快捷的帮助你完成SDMs的构建,写出你的中英文论文。 阅读详情

相关推荐

《计算机网络》课程大作业- 《小区局域网的设计和规划》

8.1首先,在满足用户需求方面,通过详细的需求分析,充分考虑了居民和物业管理的不同业务需求。对于居民,无论是日常的高清视频播放、在线游戏、远程办公还是智能家居设备的连接,网络都能提供稳定的高速带宽支持。从有线网络的千兆以太网技术保障稳定的有线连接,到无线网络采用 Wi - Fi 6 技术确保无线覆盖区域的高速和低延迟,满足了居民多样化的娱乐和生活需求。对于物业管理,安防监控系统的实时数据传输、物业办公自动化系统的流畅运行以及社区信息的及时发布等业务,都有针对性的网络设计。

lisangsimida的博客 2598

Text Justification

Text Justification 题解 题目描述 即文本对齐:填充单词之间空格使得占满一行(除了最后一行左对齐)。如:words: ["This", "is", "an", "example", "of", "text", "justification."],L: 16.对齐后: "This is an" "examp...

weixin_33851429的博客 179

Wireshark抓包实战:5个CTF比赛中高频出现的流量分析技巧(附真实案例)

本文分享了Wireshark在CTF比赛和实战渗透中的五个核心流量分析技巧。内容涵盖从宏观统计概览锁定可疑目标、深度解析ICMP与HTTP等协议、追踪重组完整会话流,到利用字符串搜索和命令行工具进行自动化分析。掌握这些高阶技巧能显著提升分析海量网络流量的效率与精准度。

rrr55的博客 261

LeetCode——68. 文本左右对齐(Text Justification)[困难]——分析及代码(Java)

LeetCode——68. 文本左右对齐[Text Justification][困难]——分析及代码[Java]一、题目二、分析及代码1. 模拟(1)思路(2)代码(3)结果三、其他 一、题目 给定一个单词数组和一个长度 maxWidth,重新排版单词,使其成为每行恰好有 maxWidth 个字符,且左右两端对齐的文本。 你应该使用“贪心算法”来放置给定的单词;也就是说,尽可能多地往每行中放置单词。必要时可用空格 ’ ’ 填充,使得每行恰好有 maxWid

江南土豆的博客 376

在URP中正确写入Sprite深度以使用DOF

我准备在文字冒险中加入景深的效果,但是因为unity内置shader的缘故,sprite是不会写入深度的,而如果要使用PostProcessing的DOF效果的话,是必须要将半透明物体的深度正确写入Depth Buffer的,这篇消耗了我大量精力的文章就是要介绍正确写入的方法。 其实,如果只是要在2D游戏中实现类似于景深的效果,不写入深度其实也是可以的,我找到的有两种方案:一种是实时对Sprite进行模糊计算;二是直接使用离线预模糊的图片,根据强度进行混合。 离线预模糊 虽然这两种方法都可以比较简

FREEstriker的博客 2729

C#安装OpenCv及打开笔记本默认摄像头方法

C#安装OpenCv及打开笔记本默认摄像头方法

cg1135217680的博客 2572

【leetcode】第68题 Text Justification 解析及java代码

这题164赞538踩。。好惨 就是输入一个字符串数组,数组里每一项是一个单词。再输入一个maxWidth,这个长度是输出每一行的字符串长度。 要求是每个单词和每个单词之间最少一个空格,如果一行最后剩余的位置不能再放一个单词,就把这一行后面的空格平均分到前面几个单词中间。 如果这一行只有一个单词或者这是最后一行,那么就不用管后面的空格了(但是还是要补充空格到maxWidth)。 我的思路比较...

722

1.2 从“跟网”到“构网”:技术范式的历史性转变

新型电力系统面临"双高"特征带来的稳定性挑战,促使并网控制技术从"跟网型"向"构网型"范式转变。传统跟网型变流器作为受控电流源依赖强电网,存在短路电流能力有限、易失稳等缺陷;而构网型变流器模拟同步发电机特性,作为受控电压源具备自主建立电压/频率、提供虚拟惯性、增强短路容量和改善系统阻尼四大核心能力。这一技术范式转变使变流器从电网跟随者变为构建支撑者,成为解决新能源大规模接入稳定性的关键。

技术工作者 720

算法leetcode|68. 文本左右对齐(rust重拳出击)

给定一个单词数组 words 和一个长度 maxWidth ,重新排版单词,使其成为每行恰好有 maxWidth 个字符,且左右两端对齐的文本。 你应该使用 “贪心算法” 来放置给定的单词;也就是说,尽可能多地往每行中放置单词。必要时可用空格 ' ' 填充,使得每行恰好有 maxWidth 个字符。 要求尽可能均匀分配单词间的空格数量。如果某一行单词间的空格不能均匀分配,则左侧放置的空格数要多于右侧的空格数。 文本的最后一行应为左对齐,且单词之间不插入额外的空格。

二当家的白帽子 2009

PHP特性知识点总结

(1)类型转换之前提到过的是字符串转为整型。其实php手册里面提到了各种类型的转换。先把他放在这里。我们按照php手册上的顺序来介绍,只介绍几个比较常用的。①转化为bool②转化为整型int。

m0_73605862的博客 1295

基于MATLAB的鲁棒主成分分析(Robust PCA)图像去噪

鲁棒主成分分析(Robust PCA)是一种有效的图像去噪方法,它能够在保持图像细节的同时去除噪声。本文将介绍如何使用MATLAB实现基于鲁棒PCA的图像去噪,并提供相应的源代码。它假设噪声是随机的、高斯分布的,并将图像分解为一个低秩矩阵和一个稀疏矩阵的和。低秩矩阵表示图像的结构和纹理信息,稀疏矩阵表示图像中的噪声和细节信息。接下来,我们将图像矩阵减去均值,得到规范化的图像矩阵。然后,我们将灰度图像转换为矩阵形式,并计算图像的均值。通过分离出低秩矩阵和稀疏矩阵,我们就得到了去噪后的图像和残差图像。

DevRevolt的博客 1125

Text Justification -- LeetCode

原题链接:http://oj.leetcode.com/problems/text-justification/这道题属于纯粹的字符串操作,要把一串单词安排成多行限定长度的字符串。主要难点在于空格的安排,首先每个单词之间必须有空格隔开,而当当前行放不下更多的单词并且字符又不能填满长度L时,我们要把空格均匀的填充在单词之间。如果剩余的空格量刚好是间隔倍数那么就均匀分配即可,否则还必须把多的一个空格放...

编程语言小筑 211

Camunda 7.x 系列【62】启动流程实例源码解析

为了更好的了解Camunda,接下来我们简单分析下启动流程实例相关源码

记录知识、锤炼自我 1171

【leetcode】68.Text Justification(文本左右对齐)

Click to expand whatever

描绘自己的王国…… 398

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Leetcode 68. 文本左右对齐 Text Justification

Leetcode 68. 文本左右对齐 Text Justification 标签: Leetcode 题目地址:https://leetcode-cn.com/problems/text-justification/ 题目描述 给定一个单词数组和一个长度&nbsp;maxWidth,重新排版单词,使其成为每行恰好有&nbsp;maxWidth&nbsp;个字符,且左右两...

CoderWangSon 277

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

LeetCode68——Text Justification

LeetCode68——Text Justification 也是相当恶心的一道题,倒不是有多难,还是不知道他的边界条件是怎么样的,所以也是经过多次的提交取改进代码,最后通过。 就不细说了,代码: class Solution { private: void removeBackSpace(string &s) { int i = s.size() - 1; while (i >

上善若水 597

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

LeetCode 68. Text Justification(文本对齐)

原题网址:https://leetcode.com/problems/text-justification/ Given an array of words and a length L, format the text such that each line has exactly L characters and is fully (left and right) justified

James Pan 1150

【一天一道LeetCode】#68. Text Justification

一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder‘s Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given an array of words and a length L, format the text such that each line has exactly L char

ZeeCoder 3987

【LeetCode】 68. Text Justification 文本左右对齐(Hard)(JAVA)

【LeetCode】 68. Text Justification 文本左右对齐(Hard)(JAVA) 题目地址: https://leetcode.com/problems/text-justification/ 题目描述: Given an array of words and a width maxWidth, format the text such that each lin...

qq_16927853的博客 158

LeetCode68 Text Justification

LeetCode68 Text Justification问题描述 Given an array of words and a length L, format the text such that each line has exactly L characters and is fully (left and right) justified. You should pack yo

yanqinghe123的专栏 294

Leetcode 68 Text Justification

Given an array of words and a length L, format the text such that each line has exactly L characters and is fully (left and right) justified. You should pack your words in a greedy approach; that i

无名山丘,崛起成峰 1632

leetcode-68. Text Justification

leetcode-68. Text Justification题目: 从思路上说这个代码主要分为3个部分。 第一部分判断当前行可以容纳多少个词组 第二部分判断插入多少个空格剩余多少个空格 第三部分加入list结果中。

千念飞羽的专栏 352

【Leetcode】68. Text Justification

题目地址: https://leetcode.com/problems/text-justification/ 给定一个字符串数组AAA,再给定一个正整数www,要求对这些字符串排版,www表示每行的最大宽度,题目保证www大于等于最长字符串的长度。在排版的时候,单词之间以空格隔开,并且要求每行的单词数尽可能多,左对齐,并且单词之间的空格数尽可能平均;如果无法做到平均,则要求靠左的空格比靠右的空格数多111;对于最后一行我们特殊处理,直接要求其左对齐,并且右边补齐空格到宽度www。输出排版完成之后每行是什么

数学、算法爱好者的博客 459

leetcode 68 Text Justification

Lc68 Text Justification 我们首先要确定当前这一行能放下words[i]~words[?], 然后是如何分配空格, 如果是最后一行或是这一行只能放下一个单词,那么空格应该全部在右侧 否则,应该平均分配,余下的依次从左到右分配 1 class Solution { 2 public List<String> fullJustify(...

weixin_30916125的博客 77

python写算法题:leetcode: 68. Text Justification

class Solution(object): def fullJustify(self, words, maxWidth): """ :type words: List[str] :type maxWidth: int :rtype: List[str] """ res=[] ...

290

LeetCode 68 Text Justification

Given an array of words and a length L, format the text such that each line has exactly L characters and is fully (left and right) justified. You should pack your words in a greedy approach; that is,

mlweixiao 1153
上一篇: Leetcode算法——67、二进制数相加(add binary)
下一篇: pip 切换镜像源
HappyRocking
博客等级 码龄12年 222粉丝 176原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值