806. 写字符串需要的行数

简介: 806. 写字符串需要的行数

806. 写字符串需要的行数

一、题目描述:

我们要把给定的字符串 S 从左到右写到每一行上,每一行的最大宽度为100个单位,如果我们在写某个字母的时候会使这行超过了100 个单位,那么我们应该把这个字母写到下一行。我们给定了一个数组 widths ,这个数组 widths[0] 代表 'a' 需要的单位, widths[1] 代表 'b' 需要的单位,..., widths[25] 代表 'z' 需要的单位。

现在回答两个问题:至少多少行能放下S,以及最后一行使用的宽度是多少个单位?将你的答案作为长度为2的整数列表返回。

示例 1:输入: widths = [10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10]S = "abcdefghijklmnopqrstuvwxyz"输出: [3, 60]解释: 所有的字符拥有相同的占用单位10。所以书写所有的26个字母,我们需要2个整行和占用60个单位的一行。示例 2:输入: widths = [4,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10]S = "bbbcccdddaaa"输出: [2, 4]解释: 除去字母'a'所有的字符都是相同的单位10,并且字符串 "bbbcccdddaa" 将会覆盖 9 * 10 + 2 * 4 = 98 个单位.最后一个字母 'a' 将会被写到第二行,因为第一行只剩下2个单位了。所以,这个答案是2行,第二行有4个单位宽度。

注:

字符串 S 的长度在 [1, 1000] 的范围。S 只包含小写字母。widths 是长度为 26的数组。widths[i] 值的范围在 [2, 10]。

来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/number-of-lines-to-write-string著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、思路分析:

这道题考察了什么思想?你的思路是什么?

  1. 这道题目采用的是模拟法。
    我的思路是遍历字符串,并计算各字符的权重,然后求和,放入weights中,如果判断求和后weights大于100,就把weights设为该值,然后lines加一。最后返回[lines,weights]数组。

做题的时候是不是一次通过的,遇到了什么问题,需要注意什么细节?

  1. 不是一次通过的,刚开始不知道returnSize有什么用,执行代码有问题,后来给该参数赋值即可pass。

有几种解法,哪种解法时间复杂度最低,哪种解法空间复杂度最低,最优解法是什么?其他人的题解是什么,谁的效率更好一些?用不同语言实现的话,哪个语言速度最快?

  1. 没有看到什么其他特别好的解法。。。。。

三、AC 代码:

/**

* Note: The returned array must be malloced, assume caller calls free().

*/

int*numberOfLines(int*widths, intwidthsSize, char*s, int*returnSize){

   intlen=strlen(s);

   intweights=0;

   intlines=1;

   for(inti=0;i<len;i++){

       if(weights+widths[s[i]-'a'] >100){

           weights=widths[s[i]-'a'];

           lines++;

           continue;

       }

       weights+=widths[s[i]-'a'];

   }

   int*res= (int*)malloc(sizeof(int) *2);

   *returnSize=2;

   res[0] =lines;

   res[1] =weights;

   returnres;

}

四、总结:

基础题目一个,我这种刚入门级菜鸟都能解决,你也行!

目录
相关文章
|
C语言
【嵌入式C语言】字符转字符串,整形数字转字符串技巧(sprintf函数妙用)
【嵌入式C语言】字符转字符串,整形数字转字符串技巧(sprintf函数妙用)
359 0
|
机器学习/深度学习 算法
【MATLAB】SVMD_LSTM神经网络时序预测算法
【MATLAB】SVMD_LSTM神经网络时序预测算法
165 3
|
机器学习/深度学习 算法 前端开发
R语言基础机器学习模型:深入探索决策树与随机森林
【9月更文挑战第2天】决策树和随机森林作为R语言中基础且强大的机器学习模型,各有其独特的优势和适用范围。了解并熟练掌握这两种模型,对于数据科学家和机器学习爱好者来说,无疑是一个重要的里程碑。希望本文能够帮助您更好地理解这两种模型,并在实际项目中灵活应用。
|
块存储
ceph集群的OSD设备扩缩容实战指南
这篇文章详细介绍了Ceph集群中OSD设备的扩容和缩容过程,包括如何添加新的OSD设备、如何准备和部署,以及如何安全地移除OSD设备并从Crushmap中清除相关配置。
523 4
|
人工智能 BI
【差分数组】
【差分数组】
123 0
|
JavaScript Java 测试技术
基于小程序的医院管理系统+springboot+vue.js附带文章和源代码说明文档ppt
基于小程序的医院管理系统+springboot+vue.js附带文章和源代码说明文档ppt
87 1
|
存储 监控 数据可视化
使用Jaeger进行分布式跟踪:学习如何在服务网格中使用Jaeger来监控和分析请求的跟踪信息
使用Jaeger进行分布式跟踪:学习如何在服务网格中使用Jaeger来监控和分析请求的跟踪信息
227 0
|
小程序 数据安全/隐私保护
极客SaaS框架开源包
听说后边要出saas去水印小程序 saas短视频去重小程序
111 2
|
Linux
linux命令之sort
linux命令之sort
193 2
|
JavaScript 关系型数据库 MySQL
一文详解Docker数据卷(volume)
一文详解Docker数据卷(volume)